我在我的 MVC 网站上使用 51 度作为为我的页面提供服务的自适应方法。一切运作良好。
我最近添加了输出缓存,并使用它VaryByCustom
来检查它是移动设备还是桌面设备:
public override string GetVaryByCustomString(HttpContext context, string custom)
{
// this is for the output cache
if (context != null)
{
switch (custom)
{
case "Mobile":
return GetMobileCustomString(context);
}
}
return base.GetVaryByCustomString(context, custom);
}
private static string GetMobileCustomString(HttpContext context)
{
if (context.Request.Browser.IsMobileDevice)
{
return "IsMobile";
}
else
{
return "IsDesktop";
}
}
但是我遇到了一个问题,如果第一个浏览该网站的移动用户请求了桌面版本,这将为所有移动用户缓存。
我需要更改它 GetMobileCustomString
以检查它是否是请求桌面站点的移动设备。有没有办法做到这一点?
更新
由于对此已开放赏金,我想我会提供更新:
首先,这并不是我最初想的那样导致桌面页面被缓存的第一次加载,所以在对此进行了大量搜索、研究和测试后,我觉得桌面页面永远不应该为移动版本缓存(如果你在 MVC 5 上)。在执行移动请求时,我已经逐步完成了代码,当它通过自定义到达时,它显示context.Request.Browser.IsMobileDevice
为false
.
不确定是什么导致桌面站点为移动站点缓存 - 可能是MVC 4 中的错误的遗留问题。它似乎是随机的(即,有一天它会很好,然后另一天它会出于某种原因为桌面站点提供服务)并且回收应用程序池将始终修复它。
我还发现我可以使用以下方法获取覆盖的浏览器:
using System.Web.Wepages;
context.Request.RequestContext.HttpContext.GetOverriddenBrowser();
但是好像用处不大