通常我们可以进行缓存并依赖于Request.QueryString值,如
<%@ OutputCache Duration="15" VaryByParam="search" %>
这样的网址可能是:
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"]
在这种情况下,我应该如何在此路线值上建立页面的依赖关系。
我是新手,因此我对此并不了解。
我们是否需要进行一些自定义缓存。
答案 0 :(得分: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);
}
这会因您的所有网址而异,而不仅仅是productId。我猜你可以在Request对象上做更多工作,以便在需要时做更聪明的事情