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

105

Czy możesz mi powiedzieć, jak uzyskać nazwę przeglądarki, której używa klient w MVC 6, ASP.NET 5?

eadam
źródło

Odpowiedzi:

164

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

Dzięki

eadam
źródło
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;

Aneeq Azam Khan
źródło
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
userAgent = Request.Headers["User-Agent"]; 

https://code.msdn.microsoft.com/How-to-get-OS-and-browser-c007dbf7 (link nieaktywny) przejdź do 4.8

https://docs.microsoft.com/en-us/dotnet/api/system.web.httprequest.useragent?view=netframework-4.8

Uzay
źródło
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());
        }
    }
}
Sarin Na Wangkanai
źródło
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();
Stefano Balzarotti
źródło