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.