2

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

在这种情况下,我应该如何使页面依赖于该路由值。

我是缓存新手,所以我没有太多相同的知识。

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

4

1 回答 1

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

于 2013-02-24T20:31:38.483 回答