首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.Net MVC4移动感知OutputCache

ASP.Net MVC4移动感知OutputCache
EN

Stack Overflow用户
提问于 2012-03-08 00:11:51
回答 2查看 2.3K关注 0票数 12

我正在将一个应用程序从MVC3升级到MVC4,并注意到了一些我认为(希望如此?)就会“干活”。

代码:

代码语言:javascript
运行
复制
[OutputCache(Duration = 600, VaryByParam = "none")]
public ActionResult Index()
{
   return View();
}

这是一个用于ASP.Net的教科书缓存示例。每当浏览器访问页面时,它都会检查缓存以查看是否存在某些内容,如果不存在,则生成视图,然后发送缓存的结果。

这很有效;但是,在使用MVC4的移动视图功能时,我注意到上面的代码没有检查请求是否来自移动设备。因此,如果我在桌面上点击该路由,桌面视图将一直显示在我手机上,直到缓存失效。反之亦然(如果我第一次用手机点击页面,桌面就会看到移动视图)。

有没有一个参数可以让它像我希望的那样工作,或者我正在考虑构建一个customer OutputCacheProvider?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-08 00:58:06

经过进一步的挖掘,我找到了这个问题的解决方案。

已更新控制器操作

代码语言:javascript
运行
复制
[OutputCache(Duration = 600, VaryByCustom = "IsMobile")]
public ActionResult Index()
{
   return View();
}

覆盖Global.asax中的GetVaryByCustomString

代码语言:javascript
运行
复制
public override string GetVaryByCustomString(HttpContext context, string custom)
{
    if (custom.ToLowerInvariant() == "ismobile" && context.Request.Browser.IsMobileDevice)
    {
        return "mobile";
    }
    return base.GetVaryByCustomString(context, custom);
}
票数 25
EN

Stack Overflow用户

发布于 2013-01-04 13:01:26

这是正确的GetVaryByCustomString方法

代码语言:javascript
运行
复制
public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        if (custom.ToLowerInvariant() == "ismobile")
        {
            return context.GetVaryByCustomStringForOverriddenBrowser();
        }
        return base.GetVaryByCustomString(context, custom);
    }
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9605085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档