2013-02-24 42 views
2

通常情況下,我們可以做緩存和作出的Request.QueryString值依賴像緩存改變由帕拉姆當我們有ASP.NET路由值,而不是查詢字符串值

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

這樣的URL可能是這樣:

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

但在我的應用我使用ASP.NET 4.0路由我在哪裏傳遞產品的ID,如:

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

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

等等.....

在這種情況下,我訪問產品ID作爲東西

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,而不僅僅是產品ID的不同而不同。我想你可以在Request對象上做更多的工作,在需要的時候做更聰明的事情