Кэширование Vary BY Param, когда у нас есть значения маршрутизации ASP.NET вместо значений QueryString

Обычно мы можем выполнять кэширование и устанавливать зависимость от значений Request.QueryString, например

<%@ OutputCache Duration="15" VaryByParam="search" %>

URL-адрес для таких может быть таким:

http://www.demo.com/default.aspx?search=name

Но в моем приложении я использую маршрутизацию ASP.NET 4.0, где я передаю идентификатор продукта, например:

 http://www.demo.com/searchdetails/40563

or

http://www.demo.com/searchdetails/40564

и так далее.....

В этом случае я получаю доступ к идентификатору продукта как

 Page.Route.Value["product_id"]

В этом случае, как мне сделать зависимость страницы от этого значения маршрута.

Я новичок в кэшировании, поэтому у меня нет особых знаний о том же.

Нужно ли нам делать какое-то пользовательское кэширование.


person Peyk Yazılım    schedule 24.02.2013    source источник


Ответы (1)


Я думаю, вам нужно использовать VaryByCustom. Что-то вроде этого:

<%@ OutputCache Duration="15" VaryByParam="None" VaryByCustom="productIdInUrl" %>

Затем добавьте свой собственный фильтр в файл global.asax:

public override string GetVaryByCustomString(HttpContext context, 
string arg)
{
   if(arg == "productIdInUrl")
   {
      return context.Request.RawUrl;
   }
   return base.GetVaryByCustomString(context, arg);
}

Это будет зависеть от всего вашего URL, а не только от productId. Я думаю, вы могли бы поработать над объектом Request, чтобы сделать что-то более умное, если это необходимо.

person Olav Nybø    schedule 24.02.2013