¿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

eadam
fuente
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;

Aneeq Azam Khan
fuente
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
userAgent = Request.Headers["User-Agent"]; 

https://code.msdn.microsoft.com/How-to-get-OS-and-browser-c007dbf7 (enlace no en vivo) ir por 4.8

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

Uzay
fuente
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());
        }
    }
}
Sarin Na Wangkanai
fuente
¿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();
Stefano Balzarotti
fuente