你能告诉我如何得到客户端在 MVC 6,ASP.NET 5中使用的浏览器名称吗?
我认为这是一个简单的。得到的答案在 Request.Headers["User-Agent"].ToString()
Request.Headers["User-Agent"].ToString()
我已经开发了一个扩展 ASP.NET 核心的库,以支持在 旺卡奈,侦探的 Web 客户端浏览器信息检测,这应该让你标识的浏览器名称。
namespace Wangkanai.Detection { /// <summary> /// Provides the APIs for query client access device. /// </summary> public class DetectionService : IDetectionService { public HttpContext Context { get; } public IUserAgent UserAgent { get; } public DetectionService(IServiceProvider services) { if (services == null) throw new ArgumentNullException(nameof(services)); this.Context = services.GetRequiredService<IHttpContextAccessor>().HttpContext; this.UserAgent = CreateUserAgent(this.Context); } private IUserAgent CreateUserAgent(HttpContext context) { if (context == null) throw new ArgumentNullException(nameof(Context)); return new UserAgent(Context.Request.Headers["User-Agent"].FirstOrDefault()); } } }
userAgent = Request.Headers["User-Agent"];
Https://code.msdn.microsoft.com/how-to-get-os-and-browser-c007dbf7(link not live) 4.8
Https://learn.microsoft.com/en-us/dotnet/api/system.web.httprequest.useragent?view=netframework-4.8
对我来说,Request.Headers["User-Agent"].ToString()没有帮助导致返回所有的浏览器名称,所以发现以下解决方案。
已安装 解析。
控制器 using UAParser;
using UAParser;
var userAgent = HttpContext.Request.Headers["User-Agent"]; var uaParser = Parser.GetDefault(); ClientInfo c = uaParser.Parse(userAgent);
使用以上代码后,可以通过使用 c.UA.Family + " " + c.UA.Major +"." + c.UA.Minor从 userAgent 获得浏览器详细信息 您还可以获得操作系统的详细信息,如 c.OS.Family;
c.UA.Family + " " + c.UA.Major +"." + c.UA.Minor
c.OS.Family;
其中 c.UA.Major是浏览器的主要版本,而 c.UA.Minor是浏览器的次要版本。
c.UA.Major
c.UA.Minor
安装这个 。 nuget 包
创建一个这样的类:
public static class YauaaSingleton { private static UserAgentAnalyzer.UserAgentAnalyzerBuilder Builder { get; } private static UserAgentAnalyzer analyzer = null; public static UserAgentAnalyzer Analyzer { get { if (analyzer == null) { analyzer = Builder.Build(); } return analyzer; } } static YauaaSingleton() { Builder = UserAgentAnalyzer.NewBuilder(); Builder.DropTests(); Builder.DelayInitialization(); Builder.WithCache(100); Builder.HideMatcherLoadStats(); Builder.WithAllFields(); } }
在您的控制器中,您可以从 http 头中读取用户代理:
string userAgent = Request.Headers?.FirstOrDefault(s => s.Key.ToLower() == "user-agent").Value;
然后您可以解析用户代理:
var ua = YauaaSingleton.Analyzer.Parse(userAgent ); var browserName = ua.Get(UserAgent.AGENT_NAME).GetValue();
你也可以得到信心水平(越高越好) :
var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
在生产应用中,首先要检查用户代理是否存在。
public static string GetUserAgent(this HttpContext context) { if (context.Request.Headers.TryGetValue(HeaderNames.UserAgent, out var userAgent)) { return userAgent.ToString(); } return "Not found"; }
var userAgent = $"{this.Request?.HttpContext?.Request?.Headers["user-agent"]}";