Comment obtenir le nom du navigateur utilisateur (user-agent) dans Asp.net Core?

99

Pouvez-vous me faire savoir comment obtenir le nom du navigateur utilisé par le client dans MVC 6, asp.net 5?

eadam
la source

Réponses:

156

Je pense que c'était facile. J'ai la réponseRequest.Headers["User-Agent"].ToString()

Merci

eadam
la source
10
cela m'a renvoyé tous les noms de navigateurs
kobosh
4
@koboshRequest.Headers["User-Agent"].ToString()
Andriy Tolstoy
10
Attention, cela se produira si une KeyNotFoundException si la requête n'a pas d'agent utilisateur! Assurez-vous d'utiliser d'abord .ContainsKey pour vérifier!
user169771
12
Grattez ça. il renvoie simplement "" à la place pour une raison quelconque. Hourra pour la cohérence ...
user169771
35
Certains peuvent préférer Request.Headers[HeaderNames.UserAgent]éviter la chaîne littérale (peut ne pas avoir fonctionné dans Core 1.0, pas sûr)
Will Dean
19

Pour moi, je Request.Headers["User-Agent"].ToString()n'ai pas aidé cuase à renvoyer tous les noms de navigateurs, j'ai donc trouvé la solution suivante.

Installé ua-parse . Dans le contrôleurusing UAParser;

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

après avoir utilisé le code ci-dessus, a pu obtenir les détails du navigateur de userAgent en utilisant c.UserAgent.Family Vous pouvez également obtenir des détails du système d'exploitation commec.OS.Family;

Aneeq Azam Khan
la source
2
Exactement ce dont j'avais besoin!
Eric
2
Ce n'est pas une liste de tous les noms de navigateur, c'est ce que le navigateur définit comme User-Agent. L'UAParser sait comment prendre tous ces noms et déterminer quel est le navigateur et le système d'exploitation réels.
John C
16
userAgent = Request.Headers["User-Agent"]; 

https://code.msdn.microsoft.com/How-to-get-OS-and-browser-c007dbf7 (lien pas en direct) optez pour 4.8

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

Uzay
la source
Merci d'avoir écrit un petit court utile
FindOutIslamNow
Ce lien est la meilleure réponse. La chaîne User-Agent est une chaîne que vous devez déchiffrer et analyser pour obtenir des informations sur la version. Les classes qui y sont proposées font tout le travail.
JustLooking
Je vous remercie! pour commentaires Mis à jour!
Ouzay
8

J'ai développé une bibliothèque pour étendre ASP.NET Core pour prendre en charge la détection des informations du navigateur du client Web à Wangkanai.Detection Cela devrait vous permettre d'identifier le nom du navigateur.

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
la source
Comment cela marche-t-il? Je vois que vous avez un DeviceResolver.cspour savoir s'il s'agit d'un mobile, d'une table ou d'un bureau, mais je ne vois pas de code similaire pour extraire les détails de l'en-tête de l'agent utilisateur.
thoean
J'ai mis à jour le repo et le readme devient plus mature. github.com/wangkanai/Detection
Sarin Na Wangkanai
0

Installez ce package .nuget

créez une classe comme celle-ci:

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


    }

dans votre contrôleur, vous pouvez lire l'agent utilisateur à partir des en-têtes http:

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

Ensuite, vous pouvez analyser l'agent utilisateur:

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

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

vous pouvez également obtenir le niveau de confiance (plus élevé est meilleur):

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