在我的asp.net mvc项目中,我在控制器上启用了输出缓存,如下所示
[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;
}
}然后,动作方法将以seller作为参数。我总是通过提供不同的seller参数来测试它,但它从缓存中获取输出,而不是调用该方法。
在asp.net mvc中,设置VaryByParam="*“是否也因RouteData.Values而异?
我使用的是ASP.Net 4 MVC 3 RC 2
发布于 2010-12-24 05:21:55
输出缓存机制因URL、QueryString和表单而异。这里没有表示RouteData.Values。这样做的原因是输出缓存模块在路由之前运行,因此当第二个请求传入时,输出缓存模块查找匹配的缓存条目时,甚至没有RouteData对象可供检查。
通常这不是问题,因为RouteData.Values直接来自URL,而URL已经被占了。如果您想改变一些自定义值,可以使用VaryByCustom和GetVaryByCustomString来实现。
发布于 2012-01-03 18:31:50
如果您删除了VaryByParam = "*“,它应该在缓存时使用您的操作方法参数值。
ASP.NET MVC3的输出缓存系统不再要求您在控制器操作方法上声明VaryByParam属性时指定OutputCache属性。当您的操作方法上有显式参数时,MVC3现在会自动更改输出缓存条目-允许您干净地启用输出...
来源:http://weblogs.asp.net/scottgu/archive/2010/12/10/announcing-asp-net-mvc-3-release-candidate-2.aspx
[OutputCache(Duration = 100, VaryByHeader = "X-Requested-With")]
public class CatalogController : BaseController
{
public ActionResult Index(string seller)
{
// I do something
}
}https://stackoverflow.com/questions/4518671
复制相似问题