如何获得用户浏览器名称(用户代理)在 Asp.net 核心?

你能告诉我如何得到客户端在 MVC 6,ASP.NET 5中使用的浏览器名称吗?

127992 次浏览

我认为这是一个简单的。得到的答案在 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());
}
}
}

对我来说,Request.Headers["User-Agent"].ToString()没有帮助导致返回所有的浏览器名称,所以发现以下解决方案。

已安装 解析

控制器 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.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"]}";