在我的 asp.net mvc 项目中,我在 Controller 上启用输出缓存,如下所示
[OutputCache(Duration = 100, VaryByParam = "*", VaryByHeader = "X-Requested-With")]
public class CatalogController : BaseController
{
public ActionResult Index(string seller)
{
// I do something
}
}
它工作得很好,直到创建我自己的 Route 类,如下所示
public class MyRoute : Route
{
// there is a constructor here..
// I override this method..
// just to add one data called 'seller' to RouteData
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var data = base.GetRouteData(httpContext);
if (data == null) return null;
var seller = DoSomeMagicHere();
// add seller
data.Values.Add("seller", seller);
return data;
}
}
然后,action 方法将以 seller
作为参数。我通过始终提供不同的 seller
参数来测试它,但它从缓存中获取输出而不是调用该方法。
在 asp.net mvc 中,设置 VaryByParam="*"是否也会因 RouteData.Values 而异?
我正在使用 ASP.Net 4 MVC 3 RC 2
最佳答案
输出缓存机制因 URL、查询字符串和表单而异。 RouteData.Values 此处未表示。原因是输出缓存模块在路由之前运行,因此当第二个请求到来并且输出缓存模块正在寻找匹配的缓存条目时,它甚至没有要检查的 RouteData 对象.
通常这不是问题,因为 RouteData.Values 直接来自 URL,该 URL 已被考虑在内。如果您想根据某个自定义值进行更改,请使用 VaryByCustom和 GetVaryByCustomString来实现这一点。
关于asp.net-mvc - VaryByParam ="*"是否也读取 RouteData.Values?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518671/