如何在 Asp.net Core 中获取用户浏览器名称 ( user-agent )?
How to get user Browser name ( user-agent ) in Asp.net Core?
能否告诉我如何获取客户端在 MVC 6、ASP.NET 5 中使用的浏览器名称?
我认为这很简单。在 Request.Headers["User-Agent"].ToString()
中得到答案
我开发了一个库来扩展 ASP.NET 核心以支持 Wangkanai.Detection 处的 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 未直播)
争取 4.8
https://docs.microsoft.com/en-us/dotnet/api/system.web.httprequest.useragent?view=netframework-4.8
对我来说 Request.Headers["User-Agent"].ToString()
没有帮助返回所有浏览器名称,因此找到了以下解决方案。
已安装 ua-parse。
在控制器中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 获取浏览器详细信息
您还可以获得 OS 详细信息,例如 c.OS.Family;
其中 c.UA.Major
是浏览器主要版本,c.UA.Minor
是浏览器次要版本。
安装这个 .nuget package
像这样创建一个 class:
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 headers:
读取用户代理
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";
}
能否告诉我如何获取客户端在 MVC 6、ASP.NET 5 中使用的浏览器名称?
我认为这很简单。在 Request.Headers["User-Agent"].ToString()
我开发了一个库来扩展 ASP.NET 核心以支持 Wangkanai.Detection 处的 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 未直播) 争取 4.8
https://docs.microsoft.com/en-us/dotnet/api/system.web.httprequest.useragent?view=netframework-4.8
对我来说 Request.Headers["User-Agent"].ToString()
没有帮助返回所有浏览器名称,因此找到了以下解决方案。
已安装 ua-parse。
在控制器中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 获取浏览器详细信息
您还可以获得 OS 详细信息,例如 c.OS.Family;
其中 c.UA.Major
是浏览器主要版本,c.UA.Minor
是浏览器次要版本。
安装这个 .nuget package
像这样创建一个 class:
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 headers:
读取用户代理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";
}