MVC5 DisplayModes - 视图混淆了

时间:2014-08-21 19:05:46

标签: asp.net .net asp.net-mvc caching outputcache

我有一个" OperaMini" displaymode,然后是_Layout.OperaMini.cshtml布局。

这可行,直到我添加输出缓存。我使用这个缓存配置文件:

<add name="Cache1HourVaryByAll" duration="3600" enabled="true" varyByParam="*" />

如果页面上的第一个匹配来自OperaMini用户代理,则所有后续请求(无论其用户代理如何)都会获取OperaMini页面。

我已尝试过在此workitem,FixedDisplayModes等上列出的建议,但我无法让它发挥作用。

我也将HttpRuntime.Cache用于某些对象,这会导致问题吗?

这应该在MVC5中修复?或者我做错了什么?

1 个答案:

答案 0 :(得分:1)

您必须引入(伪)Vary-By-DisplayMode机制:

的Global.asax:

public override string GetVaryByCustomString(HttpContext context, string arg)
{
    if (arg.ToLower() == "displaymode")
    {
        var currentDisplayMode = DisplayModeProvider.Instance.Modes.FirstOrDefault(x => x.CanHandleContext(new HttpContextWrapper(context)));

        return "displayMode=" + currentDisplayMode.DisplayModeId;
    }

    return base.GetVaryByCustomString(context, arg);
}

Web.Config中:

<add name="Cache1HourVaryByAll"
     duration="3600"
     enabled="true"
     varyByParam="*"
     varyByCustom="displaymode" />