¿Cómo obtener el nombre del navegador de usuario (agente de usuario) en Asp.net Core?


Respuestas:


156

Creo que fue fácil. Tengo la respuesta enRequest.Headers["User-Agent"].ToString()

Gracias


10
esto me devolvió todos los nombres de los navegadores
— kobosh

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

10
¡Tenga en cuenta que esto resultará si una KeyNotFoundException si la solicitud no tiene User-Agent! ¡Asegúrese de usar .ContainsKey primero para verificar!
— user169771

12
Rasca eso. simplemente devuelve "" en su lugar por alguna razón. Hurra por la coherencia ...
— user169771

35
Algunos pueden preferir Request.Headers[HeaderNames.UserAgent]evitar el literal de cadena (puede que no haya funcionado en Core 1.0, no estoy seguro)
— Will Dean

19

Para mí, Request.Headers["User-Agent"].ToString()no ayudó a devolver todos los nombres de los navegadores, así que encontré la siguiente solución.

Ua -parse instalado . En controladorusing UAParser;

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

después de usar el código anterior, pude obtener los detalles del navegador de userAgent usando c.UserAgent.Family También puede obtener detalles del sistema operativo comoc.OS.Family;


2
¡Exactamente lo que necesitaba!
— Eric

2
Esa no es una lista de todos los nombres de navegador, eso es lo que el navegador está configurando como User-Agent. El UAParser sabe cómo tomar todos esos nombres y determinar cuál es el navegador y el sistema operativo reales.
— John C

16

Gracias por escribir un pequeño breve útil
— FindOutIslamNow

Ese enlace es la mejor respuesta. La cadena User-Agent es una cadena que debe descifrar y analizar para obtener información sobre la versión. Las clases impartidas allí hacen todo el trabajo duro.
— JustLooking

¡Gracias! para recibir comentarios ¡Actualizado!
— Uzay

8

Desarrollé una biblioteca para extender ASP.NET Core para admitir la detección de información del navegador del cliente web en Wangkanai.Detection Esto debería permitirle identificar el nombre del navegador.

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

¿Como funciona esto? Veo que tiene DeviceResolver.csque averiguar si es un dispositivo móvil, una mesa o una computadora de escritorio, pero no puedo ver un código similar para extraer detalles del encabezado del agente de usuario.
— hasta el

He actualizado el repositorio y el archivo Léame se está volviendo más maduro. github.com/wangkanai/Detection
— Sarin Na Wangkanai

0

Instale este paquete .nuget

crea una clase como esta:

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


    }

en su controlador puede leer el agente de usuario de los encabezados http:

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

Luego puede analizar el agente de usuario:

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

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

también puede obtener el nivel de confianza (cuanto más alto, mejor):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.