【问题标题】:How to override Browser.IsMobileDevice is ASP.NET MVC4 application?如何覆盖 Browser.IsMobileDevice 是 ASP.NET MVC4 应用程序?
【发布时间】:2013-10-26 11:26:00
【问题描述】:

我正在寻找一种方法将 HttpContext.Current.Request.Browser.IsMobileDevice 设置为 true 以用于未受 MVC4 和 51degrees.mobi 检测的自定义移动设备,这也在应用程序中使用。

我在 Global.asax.cs 中试过这个:

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
{
    HttpContext.Current.Request.Browser.IsMobileDevice = true;
}

但是我得到一个编译错误:

属性或索引器 'System.Web.Configuration.HttpCapabilitiesBase.IsMobileDevice' 不能 被分配给——它是只读的

使用 51degrees.mobi、jquery、jquery-ui 和 jquery-ui-mobile。

【问题讨论】:

    标签: c# jquery asp.net asp.net-mvc-4 mobile


    【解决方案1】:

    该属性由客户端发送到服务器的请求设置,以便您检查服务器上的浏览器用户代理,这就是它不允许更改的原因。

    如果你想改变服务器上的用户代理,你需要添加这一行:

    HttpContext.SetOverriddenBrowser(BrowserOverride.Mobile);
    

    如果您知道可以手动设置用户代理:

    HttpContext.SetOverriddenBrowser("Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7");
    

    要清除覆盖,您需要:

    HttpContext.ClearOverriddenBrowser();
    

    看看这个page。或者如何在这个link覆盖mvc中的默认显示模式

    【讨论】:

    • 谢谢。如果将 51degrees.mobi 模块添加到应用程序,它会将 IsMobileDevice 设置为 true 以用于额外检测的设备。为什么不允许从我的应用程序中更改它?
    • 他们所做的基本上是覆盖默认的 .net 功能。 51degrees.mobi/Support/Documentation/NET/WebApplications/…
    • 他们像 mvc 一样提供浏览器用户代理列表,但他们的列表更新鲜。
    • 如何在我的应用程序中覆盖 Browser.IsMobileDevice,如 51degrees.mobile 覆盖它?我更改了应用程序并将所有 Browser.IsMobileDevice 调用替换为自定义函数调用,但更改 .NET 标准属性值可能更好,因为在我的更改中,相同版本的 OutputCache 页面用于移动和桌面设备
    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多