如何在Asp.net Core中获取用户浏览器名称(user-agent)?


Answers:


151

我认为这很容易。得到答案Request.Headers["User-Agent"].ToString()

谢谢


10
这将所有浏览器名称返回给我
kobosh,2016年

3
@koboshRequest.Headers["User-Agent"].ToString()
Andriy Tolstoy

9
请注意,如果请求没有User-Agent,则如果KeyNotFoundException会导致这种情况!请务必先使用.ContainsKey进行检查!
user169771

12
刮一下。它只是出于某种原因返回“”。为实现一致而努力...
user169771 '16

35
有些人可能更喜欢Request.Headers[HeaderNames.UserAgent]避免使用字符串文字(不确定在Core 1.0中可能无法使用)
Will Dean

19

对我来说,没有Request.Headers["User-Agent"].ToString()帮助返回所有浏览器的名称,因此在解决方案后找到了它。

安装了ua-parse。在控制器中using UAParser;

var userAgent = httpContext.Request.Headers["User-Agent"];
string uaString = Convert.ToString(userAgent[0]);
var uaParser = Parser.GetDefault();
ClientInfo c = uaParser.Parse(uaString);

使用上面的代码后,可以通过使用从userAgent获取浏览器详细c.UserAgent.Family 信息。c.OS.Family;


2
正是我需要的!
埃里克

2
那不是所有浏览器名称的列表,而是浏览器设置为User-Agent的名称。UAParser知道如何使用所有这些名称并确定实际的浏览器和操作系统。
约翰C,

15

感谢您写有用的小短篇小说
FindOutIslamNow

该链接是最佳答案。User-Agent字符串是您必须解密并解析以获得版本信息的字符串。那里提供的课程很辛苦。
JustLooking

谢谢!供反馈更新!
乌扎

8

我已经开发了一个库来扩展ASP.NET Core,以支持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());
        }
    }
}

这是如何运作的?我看到您需要DeviceResolver.cs找出它是手机,台式机还是台式机,但是看不到类似的代码来提取用户代理标头的详细信息。
thoean '16

我已经更新了仓库,自述文件也越来越成熟。github.com/wangkanai/Detection
Sarin Na Wangkanai

0

安装此.nu​​get软件包

创建一个这样的类:

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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.