当我们使用ASP.NET路由值而不是QueryString值时,缓存会改变Param

时间:2013-02-24 20:00:28

标签: c# asp.net outputcache

通常我们可以进行缓存并依赖于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"]

在这种情况下,我应该如何在此路线值上建立页面的依赖关系。

我是新手,因此我对此并不了解。

我们是否需要进行一些自定义缓存。

1 个答案:

答案 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对象上做更多工作,以便在需要时做更聪明的事情