Asp.net Core에서 사용자 브라우저 이름 (user-agent)을 얻는 방법은 무엇입니까?


99

MVC 6, asp.net 5에서 클라이언트가 사용하는 브라우저의 이름을 얻는 방법을 알려주시겠습니까?

답변:


156

쉬운 일이라고 생각합니다. 답을 얻었습니다.Request.Headers["User-Agent"].ToString()

감사


10
이 모든 브라우저를 나에게 이름을 반환
kobosh

4
@koboshRequest.Headers["User-Agent"].ToString()
안드리 톨스토이

10
요청에 User-Agent가없는 경우 KeyNotFoundException이 발생하면이 결과가 발생합니다. 먼저 .ContainsKey를 사용하여 확인하십시오!
user169771

12
스크래치. 어떤 이유로 대신 ""를 반환합니다. 일관성을위한 만세 ...
user169771

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는 이러한 모든 이름을 가져와 실제 브라우저와 OS를 결정하는 방법을 알고 있습니다.
John C

16

유용한 짧은 글을 써 주셔서 감사합니다
FindOutIslamNow

그 링크가 최고의 답입니다. User-Agent 문자열은 버전 정보를 얻기 위해 해독하고 구문 분석해야하는 문자열입니다. 그곳에서 제공되는 수업은 모든 노력을 다합니다.
JustLooking

감사합니다! 피드백 업데이트!
Uzay

8

Wangkanai.Detection 에서 웹 클라이언트 브라우저 정보 검색을 지원하도록 ASP.NET Core를 확장하는 라이브러리를 개발했습니다. 이렇게하면 브라우저 이름을 식별 할 수 있습니다.

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

리포지토리를 업데이트했으며 readme가 더 성숙 해지고 있습니다. github.com/wangkanai/Detection
사린 나 Wangkanai

0

.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();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.