gpt4 book ai didi

c# - 检查移动设备是否正在请求桌面站点

转载 作者:太空狗 更新时间:2023-10-29 22:00:11 26 4
gpt4 key购买 nike

我在我的 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.IsMobileDevicefalse

不确定是什么导致桌面站点被缓存到移动站点 - 可能是 bug in MVC 4 的后遗症.它似乎是随机的(即,有一天它会很好,然后另一天它会出于某种原因为桌面站点提供服务)并且回收应用程序池总是会修复它。

我还发现我可以通过使用以下方式获得覆盖的浏览器:

using System.Web.Wepages;

context.Request.RequestContext.HttpContext.GetOverriddenBrowser();

不过好像也没多大用

最佳答案

在我看来,如果您将缓存存储在客户端 端,那么您正在做的事情应该可行。

您应该按以下方式在 Controller 操作上使用 OutputCache 属性:

[OutputCache(Duration = 5, VaryByCustom = "Mobile", Location = OutputCacheLocation.Client)]

(时长由你决定)

也就是说,浏览器检测是基于 HTTP header 的,因此如果请求浏览器正在为不同的代理发送 header ,则没有任何帮助。

另一种选择是改用特征检测。

希望对您有所帮助。

关于c# - 检查移动设备是否正在请求桌面站点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39076578/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com