2013-02-24 9 views
2

Обычно мы можем сделать кэширование и сделать зависимость от значений Request.QueryString какКэширование Варах BY Param, когда у нас есть ASP.NET Routing значения вместо 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 

или

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

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

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

Page.Route.Value["product_id"] 

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

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

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

ответ

2

Я думаю, вы должны использовать 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, чтобы сделать что-то более умное, если необходимо