Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Asp.net Core中获取用户浏览器名(用户代理)?_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 如何在Asp.net Core中获取用户浏览器名(用户代理)?

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

您能告诉我如何获取客户端在MVC 6、ASP.NET 5中使用的浏览器名称吗?

我认为这很简单。在
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@kobosh
Request.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();