C# 如何在Asp.net Core中获取用户浏览器名(用户代理)?
您能告诉我如何获取客户端在MVC 6、ASP.NET 5中使用的浏览器名称吗?我认为这很简单。在C# 如何在Asp.net Core中获取用户浏览器名(用户代理)?,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,您能告诉我如何获取客户端在MVC 6、ASP.NET 5中使用的浏览器名称吗?我认为这很简单。在Request.Headers[“用户代理”].ToString()中获得了答案。 谢谢我开发了一个库来扩展ASP.NET Core,以支持web客户端浏览器信息检测,这样您就可以识别浏览器名称了 namespace Wangkanai.Detection { /// <summary> /// Provides the APIs for query client acce
Request.Headers[“用户代理”].ToString()中获得了答案。
谢谢我开发了一个库来扩展ASP.NET Core,以支持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());
}
}
}
namespace Wangkanai.Detection
{
///
///提供查询客户端访问设备的API。
///
公共类检测服务:IDetectionService
{
公共HttpContext上下文{get;}
公共IUserAgent用户代理{get;}
公共检测服务(IServiceProvider服务)
{
如果(services==null)抛出新的ArgumentNullException(nameof(services));
this.Context=services.GetRequiredService().HttpContext;
this.UserAgent=CreateUserAgent(this.Context);
}
专用IUserAgent CreateUserAgent(HttpContext上下文)
{
如果(context==null)抛出新的ArgumentNullException(nameof(context));
返回新的UserAgent(Context.Request.Headers[“User Agent”].FirstOrDefault());
}
}
}
(链接未激活)
选择4.8
对于我
请求。头文件[“用户代理”]。ToString()
无法帮助返回所有浏览器名称,因此找到以下解决方案
已安装[ua parse][1]。
[1]: https://github.com/ua-parser/uap-csharp
在控制器中使用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
您还可以获得操作系统详细信息,如c.OS.Family代码>
其中c.UA.Minor
是浏览器主版本,c.UA.Minor
是浏览器次版本。安装此
创建如下所示的类:
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();
您还可以获得信心级别(越高越好):
这会将所有浏览器名称返回到me@koboshRequest.Headers[“User Agent”].ToString()
注意,如果请求没有用户代理,则会出现KeyNotFoundException!请务必使用。ContainsKey先检查!把它擦掉。出于某种原因,它只返回“”。一致性万岁……有些人可能更喜欢Request.Headers[HeaderNames.UserAgent]
以避免字符串文字(可能在Core1.0中不起作用,不确定)这是如何工作的?我看到您有一个DeviceResolver.cs
来确定它是移动设备、桌子还是桌面,但我看不到类似的代码来提取用户代理标题的详细信息。我已经更新了repo,自述文件也越来越成熟@SarinNaWangkanai感谢你的解放!太棒了:)正是我需要的!这不是所有浏览器名称的列表,这是浏览器设置为用户代理的名称。UAParser知道如何获取所有这些名称,并确定实际的浏览器和操作系统是什么。感谢您编写的简短有用的链接,这是最好的答案。用户代理字符串是一个需要破译和解析才能获得版本信息的字符串。那里提供的课程完成了所有的艰苦工作。谢谢!更新反馈信息!
var ua = YauaaSingleton.Analyzer.Parse(userAgent );
var browserName = ua.Get(UserAgent.AGENT_NAME).GetValue();
var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();