简体   繁体   English

Asp.Net 5 MVC 6检测移动浏览器

[英]Asp.Net 5 MVC 6 detect mobile browser

How is it possible in Asp.Net 5 MVC 6 to detect if the user is on a mobile device? 如何在Asp.Net 5 MVC 6中检测用户是否在移动设备上?

In previous version of Asp MVC it could be done like this: 在以前版本的Asp MVC ,可以这样做:

Request.Browser.IsMobileDevice

The problem is that the namespace System.Web is not used by Asp.Net 5 . 问题是Asp.Net 5没有使用命名空间System.Web

The Request variable in the controller actions is now of type Microsoft.AspNet.Http.HttpRequest , the old version was of type System.Web.HttpRequestBase . 控制器操作中的Request变量现在是Microsoft.AspNet.Http.HttpRequest类型,旧版本的类型为System.Web.HttpRequestBase

Microsoft.AspNet.Http.HttpRequest does not contain the Browser property. Microsoft.AspNet.Http.HttpRequest不包含Browser属性。 I tried looking through other properties, but didn't find anything. 我试着浏览其他属性,但没有找到任何东西。

EDIT: as requested some resources that prove that Asp.Net 5 does not use System.Web anymore. 编辑:根据要求,一些资源证明Asp.Net 5不再使用System.Web From the Asp.Net documentation 来自Asp.Net文档

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. ASP.NET 5不再基于System.Web.dll,而是基于一组精心设计且考虑周全的NuGet包,允许您优化您的应用程序以满足您的需求。

The implementation of Request.Browser.IsMobileDevice relied on the .browser files , which AFAIK are not part of ASP.Net 5. Request.Browser.IsMobileDevice实现依赖于.browser文件 ,其中AFAIK不是ASP.Net 5的一部分。

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. asp文档中有一个关于移动特定视图的条目,因此它们必须有一些计划。

In the meantime I guess you can create your own helper method parsing the query string, for example using the regex from detectmobilebrowsers.com . 与此同时,我猜你可以创建自己的帮助方法来解析查询字符串,例如使用来自detectmobilebrowsers.com的正则表达式。 For an alternative (and less extensive) regex see detecting a mobile browser in SO. 对于替代(并且不太广泛)正则表达式,请参阅在SO中检测移动浏览器

Following this idea, a temporal solution like this extension method might help while the asp team provides their solution: 遵循这个想法,这个扩展方法的时间解决方案可能有助于asp团队提供他们的解决方案:

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"];
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM