Làm cách nào để lấy tên Trình duyệt người dùng (tác nhân người dùng) trong Asp.net Core?


99

Bạn có thể vui lòng cho tôi biết cách lấy tên của trình duyệt mà khách hàng đang sử dụng trong MVC 6, asp.net 5 không?

Câu trả lời:


156

Tôi nghĩ rằng đây là một trong những dễ dàng. Có câu trả lời trongRequest.Headers["User-Agent"].ToString()

Cảm ơn


10
điều này đã trả lại tất cả các tên trình duyệt cho tôi
kobosh

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

10
Hãy coi chừng điều này sẽ dẫn đến nếu một KeyNotFoundException nếu yêu cầu không có Tác nhân người dùng! Hãy chắc chắn sử dụng .ContainsKey trước để kiểm tra!
user169771

12
Cào đó. nó chỉ trả về "" thay vì một số lý do. Hoan hô vì sự nhất quán ...
user169771

35
Một số có thể thích Request.Headers[HeaderNames.UserAgent]như tránh ký tự chuỗi (có thể không hoạt động trong Core 1.0, không chắc chắn)
Will Dean

19

Đối với tôi đã không Request.Headers["User-Agent"].ToString()giúp trả lại tất cả các tên trình duyệt, do đó, tìm thấy giải pháp sau đây.

Đã cài đặt ua-parse . Trong bộ điều khiểnusing UAParser;

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

Sau khi sử dụng mã trên, bạn có thể lấy thông tin chi tiết về trình duyệt từ userAgent bằng cách sử dụng c.UserAgent.Family Bạn có thể lấy chi tiết hệ điều hành nhưc.OS.Family;


2
Chính xác những gì tôi cần!
Eric

2
Đó không phải là danh sách tất cả các tên trình duyệt, đó là những gì trình duyệt đang đặt làm Tác nhân người dùng. UAParser biết cách lấy tất cả các tên đó và xác định trình duyệt thực sự và hệ điều hành của nó.
John C

16

Cảm ơn vì đã viết nhỏ ngắn hữu ích
FindOutIslamNow

Liên kết đó là câu trả lời tốt nhất. Chuỗi User-Agent là một chuỗi mà bạn phải giải mã và phân tích cú pháp để có được thông tin về phiên bản. Các lớp được cung cấp ở đó thực hiện tất cả các công việc khó khăn.
JustLooking

Cảm ơn bạn! cho phản hồi Đã cập nhật!
Uzay

8

Tôi đã phát triển một thư viện để mở rộng ASP.NET Core để hỗ trợ phát hiện thông tin trình duyệt máy khách web tại Wangkanai.Detection Điều này sẽ cho phép bạn xác định tên trình duyệt.

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());
        }
    }
}

Cái này hoạt động ra sao? Tôi thấy bạn phải DeviceResolver.cstìm xem đó là thiết bị di động, bảng hay máy tính để bàn, nhưng tôi không thể thấy mã tương tự để trích xuất chi tiết của tiêu đề tác nhân người dùng.
thoean

Tôi đã cập nhật repo và readme ngày càng hoàn thiện hơn. github.com/wangkanai/Detection
Sarin Na Wangkanai

0

Cài đặt cái này gói .nuget

tạo một lớp như thế này:

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();
        }


    }

trong bộ điều khiển của bạn, bạn có thể đọc tác nhân người dùng từ các tiêu đề http:

string userAgent = Request.Headers?.FirstOrDefault(s => s.Key.ToLower() == "user-agent").Value;

Sau đó, bạn có thể phân tích cú pháp tác nhân người dùng:

 var ua = YauaaSingleton.Analyzer.Parse(userAgent );

 var browserName = ua.Get(UserAgent.AGENT_NAME).GetValue();

bạn cũng có thể nhận được mức độ tin cậy (càng cao càng tốt):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.