Jak uzyskać nazwę przeglądarki użytkownika (agenta użytkownika) w Asp.net Core?


Odpowiedzi:


164

Myślę, że to było łatwe. Mam odpowiedźRequest.Headers["User-Agent"].ToString()

Dzięki


10
to zwróciło mi nazwy wszystkich przeglądarek
— kobosh

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

10
Uważaj, jeśli wystąpi wyjątek KeyNotFoundException, jeśli żądanie nie ma agenta użytkownika! Pamiętaj, aby najpierw użyć .ContainsKey, aby to sprawdzić!
— user169771

12
Podrap to. po prostu zwraca „” zamiast tego z jakiegoś powodu. Brawo dla spójności ...
— user169771

38
Niektórzy mogą preferować Request.Headers[HeaderNames.UserAgent]unikanie dosłownego ciągu znaków (może nie działało w Core 1.0, nie jestem pewien)
— Will Dean

23

Mi nie Request.Headers["User-Agent"].ToString()pomogło zwrócenie wszystkich nazw przeglądarek, więc znalazłem następujące rozwiązanie.

Zainstalowany ua-parse . W kontrolerzeusing UAParser;

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

po użyciu powyższego kodu udało się uzyskać dane przeglądarki od userAgent za pomocą c.UserAgent.Family Możesz również uzyskać szczegółowe informacje o systemie operacyjnym, takie jakc.OS.Family;


2
Dokładnie to, czego potrzebowałem!
— Eric

2
To nie jest lista wszystkich nazw przeglądarek, to jest ustawienie przeglądarki jako agenta użytkownika. UAParser wie, jak wziąć wszystkie te nazwy i określić, jaka jest rzeczywista przeglądarka i system operacyjny.
— John C

17

Dziękuję za napisanie krótkiego, przydatnego
— FindOutIslamNow

Ten link jest najlepszą odpowiedzią. Ciąg User-Agent to ciąg, który musisz odszyfrować i przeanalizować, aby uzyskać informacje o wersji. Zapewnione tam zajęcia wykonują całą ciężką pracę.
— JustLooking

Dziękuję Ci! w celu uzyskania opinii Zaktualizowano!
— Uzay

9

Opracowałem bibliotekę rozszerzającą ASP.NET Core, aby obsługiwała wykrywanie informacji o przeglądarce klienta sieci Web w Wangkanai.Detection Powinno to umożliwić identyfikację nazwy przeglądarki.

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

Jak to działa? Widzę, że musisz DeviceResolver.csdowiedzieć się, czy jest to telefon komórkowy, stół czy komputer stacjonarny, ale nie widzę podobnego kodu do wyodrębnienia szczegółów nagłówka klienta użytkownika.
— thoean

Zaktualizowałem repozytorium i plik readme jest coraz bardziej dojrzały. github.com/wangkanai/Detection
— Sarin Na Wangkanai

0

Zainstaluj ten pakiet .nuget

utwórz taką klasę:

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


    }

w kontrolerze możesz odczytać klienta użytkownika z nagłówków http:

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

Następnie możesz przeanalizować agenta użytkownika:

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

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

możesz również uzyskać poziom pewności (im wyższy, tym lepszy):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.