Asp.Net 5 MVC 6检测移动浏览器 [英] Asp.Net 5 MVC 6 detect mobile browser

查看:61
本文介绍了Asp.Net 5 MVC 6检测移动浏览器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Asp.Net 5 MVC 6 中如何检测用户是否在移动设备上?

How is it possible in Asp.Net 5 MVC 6 to detect if the user is on a mobile device?

Asp MVC的先前版本中,可以这样进行:

In previous version of Asp MVC it could be done like this:

Request.Browser.IsMobileDevice

问题是Asp.Net 5未使用名称空间System.Web.

The problem is that the namespace System.Web is not used by Asp.Net 5.

现在控制器操作中的Request变量的类型为Microsoft.AspNet.Http.HttpRequest,旧版本的类型为

The Request variable in the controller actions is now of type Microsoft.AspNet.Http.HttpRequest, the old version was of type System.Web.HttpRequestBase.

Microsoft.AspNet.Http.HttpRequest不包含Browser属性.我尝试浏览其他属性,但未找到任何内容.

Microsoft.AspNet.Http.HttpRequest does not contain the Browser property. I tried looking through other properties, but didn't find anything.

编辑:根据要求提供了一些资源,这些资源证明Asp.Net 5不再使用System.Web. 从 Asp.Net文档

as requested some resources that prove that Asp.Net 5 does not use System.Web anymore. From the Asp.Net documentation

ASP.NET 5不再基于System.Web.dll,而是基于 在一组细粒度和完善的NuGet软件包上,使您能够 优化您的应用程序,使其具有所需的功能.

ASP.NET 5 is no longer based on System.Web.dll, but is instead based on a set of granular and well factored NuGet packages allowing you to optimize your app to have just what you need.

推荐答案

实施 Request.Browser.IsMobileDevice依赖 .browser文件,而AFAIK不属于ASP.Net5.

The implementation of Request.Browser.IsMobileDevice relied on the .browser files, which AFAIK are not part of ASP.Net 5.

让我们看看团队中是否有人可以阐明他们计划如何实现这一目标. asp文档中有一个有关移动专用视图的条目,因此它们必须为此制定一些计划.

Let's see if someone from the team can shed some light on how they plan to implement this. There is an entry in the asp docs about mobile specific views, so they must have some plans for it.

同时,我想您可以创建自己的帮助程序方法来解析查询字符串,例如使用 detectmobilebrowsers.com .有关替代的(但不太广泛的)正则表达式,请参见在SO中检测移动浏览器.

In the meantime I guess you can create your own helper method parsing the query string, for example using the regex from detectmobilebrowsers.com. For an alternative (and less extensive) regex see detecting a mobile browser in SO.

按照这个想法,当ASP团队提供其解决方案时,像这种扩展方法这样的临时解决方案可能会有所帮助:

Following this idea, a temporal solution like this extension method might help while the asp team provides their solution:

public static class RequestExtensions
{
    //regex from http://detectmobilebrowsers.com/
    private static readonly Regex b = new Regex(@"(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino", RegexOptions.IgnoreCase | RegexOptions.Multiline);
    private static readonly Regex v = new Regex(@"1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-", RegexOptions.IgnoreCase | RegexOptions.Multiline);

    public static bool IsMobileBrowser(this HttpRequest request)
    {
        var userAgent = request.UserAgent();            
        if ((b.IsMatch(userAgent) || v.IsMatch(userAgent.Substring(0, 4))))
        {
            return true;
        }

        return false;
    }

    public static string UserAgent(this HttpRequest request)
    {
        return request.Headers["User-Agent"];
    }
}

这篇关于Asp.Net 5 MVC 6检测移动浏览器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆