Como obter o nome do navegador do usuário (user-agent) no Asp.net Core?

96

Você pode me informar como obter o nome do navegador que o cliente está usando no MVC 6, asp.net 5?

eadam
fonte

Respostas:

151

Acho que foi fácil. Tenho a resposta emRequest.Headers["User-Agent"].ToString()

obrigado

eadam
fonte
10
isso retornou todos os nomes de navegadores para mim
kobosh
3
@koboshRequest.Headers["User-Agent"].ToString()
Andriy Tolstoy,
9
Esteja ciente de que isso resultará em uma KeyNotFoundException se a solicitação não tiver um User-Agent! Certifique-se de usar .ContainsKey primeiro para verificar!
user169771
12
Risca isso. ele apenas retorna "" por algum motivo. Viva a consistência ...
user169771
35
Alguns podem preferir Request.Headers[HeaderNames.UserAgent]evitar o literal de string (pode não ter funcionado no Core 1.0, não tenho certeza)
Will Dean
19

Para mim não Request.Headers["User-Agent"].ToString()ajudou cuase retornar todos os nomes de navegadores, então encontrei a solução seguinte.

Ua-parse instalado . No controladorusing UAParser;

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

depois de usar o código acima foi capaz de obter detalhes do navegador do userAgent usando c.UserAgent.Family Você também pode obter detalhes do sistema operacional, comoc.OS.Family;

Aneeq Azam Khan
fonte
2
Exatamente o que eu precisava!
Eric
2
Essa não é uma lista de todos os nomes de navegador, é o que o navegador está definindo como o Agente do Usuário. O UAParser sabe como pegar todos esses nomes e determinar qual é o navegador real e o sistema operacional dele.
John C
15
userAgent = Request.Headers["User-Agent"]; 

https://code.msdn.microsoft.com/How-to-get-OS-and-browser-c007dbf7 (link não ativo) vá para 4.8

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

Uzay
fonte
Obrigado por escrever um pequeno curto útil
FindOutIslamNow
Esse link é a melhor resposta. A string User-Agent é uma string que você deve decifrar e analisar para obter informações sobre a versão. As aulas fornecidas lá fazem todo o trabalho árduo.
JustLooking de
Obrigado! para feedback Atualizado!
Uzay
8

Desenvolvi uma biblioteca para estender o ASP.NET Core para oferecer suporte à detecção de informações do navegador do cliente da Web em Wangkanai.Detection. Isso deve permitir que você identifique o nome do 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
fonte
Como é que isso funciona? Vejo que você precisa DeviceResolver.csdescobrir se é um celular, uma mesa ou um desktop, mas não consigo ver um código semelhante para extrair detalhes do cabeçalho do agente do usuário.
thoean
Atualizei o repositório e o leia-me está ficando mais maduro. github.com/wangkanai/Detection
Sarin Na Wangkanai
0

Instale este pacote .nuget

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


    }

em seu controlador, você pode ler o agente do usuário nos cabeçalhos http:

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

Em seguida, você pode analisar o agente do usuário:

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

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

você também pode obter o nível de confiança (quanto mais alto, melhor):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
Stefano Balzarotti
fonte