我正在将一个应用程序从MVC3升级到MVC4,并注意到了一些我认为(希望如此?)就会“干活”。
代码:
[OutputCache(Duration = 600, VaryByParam = "none")]
public ActionResult Index()
{
return View();
}这是一个用于ASP.Net的教科书缓存示例。每当浏览器访问页面时,它都会检查缓存以查看是否存在某些内容,如果不存在,则生成视图,然后发送缓存的结果。
这很有效;但是,在使用MVC4的移动视图功能时,我注意到上面的代码没有检查请求是否来自移动设备。因此,如果我在桌面上点击该路由,桌面视图将一直显示在我手机上,直到缓存失效。反之亦然(如果我第一次用手机点击页面,桌面就会看到移动视图)。
有没有一个参数可以让它像我希望的那样工作,或者我正在考虑构建一个customer OutputCacheProvider?
发布于 2012-03-08 00:58:06
经过进一步的挖掘,我找到了这个问题的解决方案。
已更新控制器操作
[OutputCache(Duration = 600, VaryByCustom = "IsMobile")]
public ActionResult Index()
{
return View();
}覆盖Global.asax中的GetVaryByCustomString
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.ToLowerInvariant() == "ismobile" && context.Request.Browser.IsMobileDevice)
{
return "mobile";
}
return base.GetVaryByCustomString(context, custom);
}发布于 2013-01-04 13:01:26
这是正确的GetVaryByCustomString方法
public override string GetVaryByCustomString(HttpContext context, string custom)
{
if (custom.ToLowerInvariant() == "ismobile")
{
return context.GetVaryByCustomStringForOverriddenBrowser();
}
return base.GetVaryByCustomString(context, custom);
}https://stackoverflow.com/questions/9605085
复制相似问题