Wie erhalte ich den Browsernamen (User-Agent) in Asp.net Core?


96

Können Sie mir bitte mitteilen, wie ich den Namen des Browsers erhalte, den der Client in MVC 6, asp.net 5 verwendet?

Antworten:


151

Ich denke, das war einfach. Ich habe die Antwort erhaltenRequest.Headers["User-Agent"].ToString()

Vielen Dank


9
Dies gab mir alle Browsernamen zurück
Kobosh

3
@ KoboshRequest.Headers["User-Agent"].ToString()
Andriy Tolstoy

9
Beachten Sie, dass dies zu einer KeyNotFoundException führt, wenn die Anforderung keinen User-Agent hat! Verwenden Sie zuerst .ContainsKey, um dies zu überprüfen!
user169771

12
Vergiss das. es gibt stattdessen nur "" aus irgendeinem Grund zurück. Hurra für die Konsistenz ...
user169771

35
Einige mögen es vorziehen Request.Headers[HeaderNames.UserAgent], das String-Literal zu vermeiden (möglicherweise nicht in Core 1.0 funktioniert, nicht sicher)
Will Dean

19

Für mich hat es Request.Headers["User-Agent"].ToString()nicht geholfen, alle Browsernamen zurückzugeben, die folgende Lösung gefunden haben.

Installierte ua-parse . In der Steuerungusing UAParser;

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

Nachdem Sie den obigen Code verwendet haben, konnten Sie Browser-Details von userAgent abrufen, indem Sie verwenden. c.UserAgent.Family Sie können auch Betriebssystem-Details wie abrufenc.OS.Family;


2
Genau das, was ich brauchte!
Eric

2
Das ist nicht eine Liste aller Browsernamen, das ist, was der Browser als User-Agent einstellt. Der UAParser weiß, wie man all diese Namen nimmt und bestimmt, welchen Browser und welches Betriebssystem er verwendet.
John C

15

Vielen Dank für das Schreiben eines kleinen kurzen nützlichen
FindOutIslamNow

Dieser Link ist die beste Antwort. Die User-Agent-Zeichenfolge ist eine Zeichenfolge, die Sie entschlüsseln und analysieren müssen, um Versionsinformationen abzurufen. Die dort angebotenen Klassen leisten die ganze harte Arbeit.
JustLooking

Danke dir! für Feedback Aktualisiert!
Uzay

8

Ich habe eine Bibliothek entwickelt, um ASP.NET Core zu erweitern und die Erkennung von Webclient-Browserinformationen unter zu unterstützen Wangkanai Hiermit sollten Sie den Browsernamen identifizieren können.

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

Wie funktioniert das? Ich sehe, dass Sie DeviceResolver.csherausfinden müssen, ob es sich um ein Mobiltelefon, eine Tabelle oder einen Desktop handelt, aber ich kann keinen ähnlichen Code sehen, um Details des Benutzeragenten-Headers zu extrahieren.
thoean

Ich habe das Repo aktualisiert und die Readme-Datei wird reifer. github.com/wangkanai/Detection
Sarin Na Wangkanai

0

Installieren Sie dieses .nuget-Paket

Erstellen Sie eine Klasse wie folgt:

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


    }

In Ihrem Controller können Sie den Benutzeragenten aus den http-Headern lesen:

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

Dann können Sie den Benutzeragenten analysieren:

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

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

Sie können auch das Konfidenzniveau erhalten (höher ist besser):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.