Come ottenere il nome del browser utente (agente utente) in Asp.net Core?


Risposte:


156

Penso che questo sia stato facile. Ho la rispostaRequest.Headers["User-Agent"].ToString()

Grazie


10
questo mi ha restituito tutti i nomi dei browser
kobosh

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

10
Attenzione, questo risulterà se una KeyNotFoundException se la richiesta non ha User-Agent! Assicurati di usare .ContainsKey prima per controllare!
user169771

12
Grattalo. restituisce solo "" invece per qualche motivo. Evviva la coerenza ...
user169771

35
Alcuni potrebbero preferire Request.Headers[HeaderNames.UserAgent]come evitare la stringa letterale (potrebbe non aver funzionato in Core 1.0, non sono sicuro)
Will Dean

19

Per me Request.Headers["User-Agent"].ToString()non ha aiutato a restituire tutti i nomi dei browser, quindi ho trovato la seguente soluzione.

Ua-parse installato . Nel controllerusing UAParser;

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

dopo aver utilizzato il codice sopra è stato possibile ottenere i dettagli del browser da userAgent utilizzando c.UserAgent.Family Puoi anche ottenere i dettagli del sistema operativo comec.OS.Family;


2
Esattamente quello di cui avevo bisogno!
Eric

2
Questo non è un elenco di tutti i nomi dei browser, questo è ciò che il browser sta impostando come User-Agent. L'UAParser sa come prendere tutti quei nomi e determinare quale sia il browser e il sistema operativo effettivi.
John C

16

Grazie per aver scritto piccole brevi utili
FindOutIslamNow

Quel collegamento è la migliore risposta. La stringa User-Agent è una stringa che devi decifrare e analizzare per ottenere informazioni sulla versione. Le classi fornite lì fanno tutto il lavoro duro.
JustLooking

Grazie! per feedback Aggiornato!
Uzay,

8

Ho sviluppato una libreria per estendere ASP.NET Core per supportare il rilevamento delle informazioni del browser del client Web su Wangkanai.Detection Questo dovrebbe consentire di identificare il nome del browser.

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

Come funziona? Vedo che devi DeviceResolver.csscoprire se si tratta di un dispositivo mobile, da tavolo o desktop, ma non riesco a vedere un codice simile per estrarre i dettagli dell'intestazione dell'agente utente.
thoean

Ho aggiornato il repo e il file readme sta diventando più maturo. github.com/wangkanai/Detection
Sarin Na Wangkanai

0

Installa questo pacchetto .nuget

crea una classe come questa:

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


    }

nel tuo controller puoi leggere l'agente utente dalle intestazioni http:

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

Quindi puoi analizzare l'agente utente:

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

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

puoi anche ottenere il livello di confidenza (più alto è meglio):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.