Як отримати ім'я браузера користувача (user-agent) у Asp.net Core?


99

Чи можете ви, будь ласка, повідомити мене, як отримати назву браузера, який використовує клієнт у MVC 6, asp.net 5?

Відповіді:


156

Я думаю, це було легко. Отримав відповідьRequest.Headers["User-Agent"].ToString()

Дякую


10
це повернуло мені всі імена браузерів
kobosh

4
@koboshRequest.Headers["User-Agent"].ToString()
Андрій Толстой

10
Остерігайтеся, це призведе до того, що KeyNotFoundException, якщо у запиті немає User-Agent! Обов’язково використовуйте .ContainsKey спочатку для перевірки!
user169771

12
Подряпайте це. він просто повертає "" натомість з якихось причин. Ура за послідовність ...
user169771

35
Деякі можуть віддати перевагу Request.Headers[HeaderNames.UserAgent]униканню рядкового літералу (можливо, це не спрацьовувало в Core 1.0, не впевнений)
Will Dean

19

Мені Request.Headers["User-Agent"].ToString()не допомогло повернути усі імена браузерів, тому знайдено наступне рішення.

Встановлено ua-синтаксичний розбір . У контролеріusing UAParser;

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

після використання вищезазначеного коду вдалося отримати деталі браузера від userAgent за допомогою c.UserAgent.Family Ви можете також отримати деталі ОС, наприкладc.OS.Family;


2
Саме те, що мені потрібно було!
Ерік

2
Це не перелік усіх імен браузера, це те, що браузер встановлює як User-Agent. UAParser знає, як взяти всі ці імена та визначити, який власне браузер та ОС.
Джон С,

16
userAgent = Request.Headers["User-Agent"]; 

https://code.msdn.microsoft.com/How-to-get-OS-and-browser-c007dbf7 (посилання не працює) перейдіть на 4.8

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


Дякуємо за написання невеликого короткого корисного
FindOutIslamNow

Це посилання - найкраща відповідь. Рядок User-Agent - це рядок, який вам потрібно розшифрувати та проаналізувати, щоб отримати інформацію про версію. Навчальні там класи роблять усю важку роботу.
JustLooking

Дякую! для зворотного зв'язку Оновлено!
Узай

8

Я розробив бібліотеку для розширення ASP.NET Core для підтримки виявлення інформації веб-клієнта в браузері на Wangkanai.Detection Це має дозволити вам ідентифікувати ім'я браузера.

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

Як це працює? Я бачу, що у вас є, DeviceResolver.csщоб з’ясувати, мобільний це, табличний чи робочий стіл, але я не бачу подібного коду для вилучення деталей заголовка агента користувача.
thoean

Я оновив репо, і readme стає більш зрілим. github.com/wangkanai/Detection
Sarin Na Wangkanai 02

0

Встановіть цей пакет .nuget

створити такий клас:

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


    }

у вашому контролері ви можете прочитати агент користувача з заголовків http:

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

Потім ви можете проаналізувати агент користувача:

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

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

Ви також можете отримати рівень впевненості (чим вище, тим краще):

 var confidence = ua.Get(UserAgent.AGENT_NAME).GetConfidence();
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.