我有一个" OperaMini" displaymode,然后是_Layout.OperaMini.cshtml
布局。
这可行,直到我添加输出缓存。我使用这个缓存配置文件:
<add name="Cache1HourVaryByAll" duration="3600" enabled="true" varyByParam="*" />
如果页面上的第一个匹配来自OperaMini用户代理,则所有后续请求(无论其用户代理如何)都会获取OperaMini页面。
我已尝试过在此workitem,FixedDisplayModes等上列出的建议,但我无法让它发挥作用。
我也将HttpRuntime.Cache用于某些对象,这会导致问题吗?
这应该在MVC5中修复?或者我做错了什么?
答案 0 :(得分:1)
您必须引入(伪)Vary-By-DisplayMode机制:
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);
}
<add name="Cache1HourVaryByAll"
duration="3600"
enabled="true"
varyByParam="*"
varyByCustom="displaymode" />