Asp.Net 5 MVC 6检测移动浏览器 [英] Asp.Net 5 MVC 6 detect mobile browser
问题描述
在 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屋!