Как получить имя браузера пользователя (user-agent) в Asp.net Core?

Ответы:

165

Я думаю, это было легко. Получил ответRequest.Headers["User-Agent"].ToString()

Благодарность

Eadam
источник
10
это вернуло мне имена всех браузеров
kobosh
4
@koboshRequest.Headers["User-Agent"].ToString()
Андрей Толстой
10
Помните, что это приведет к исключению KeyNotFoundException, если в запросе нет User-Agent! Не забудьте сначала использовать .ContainsKey, чтобы проверить!
user169771
12
Сотрите это. по какой-то причине он просто возвращает "". Ура для последовательности ...
user169771
38
Некоторые могут предпочесть Request.Headers[HeaderNames.UserAgent]избегать строкового литерала (возможно, не сработало в Core 1.0, не уверен)
Уилл Дин
24

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

Установил ua-parse . В контроллере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 знает, как взять все эти имена и определить, что это за браузер и операционная система.
John C
17
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

Узай
источник
Спасибо за небольшой полезный короткий
текст
Эта ссылка - лучший ответ. Строка User-Agent - это строка, которую необходимо расшифровать и проанализировать, чтобы получить информацию о версии. Поставляемые там классы делают всю тяжелую работу.
JustLooking
Спасибо! для обратной связи Обновлено!
Узай,
9

Я разработал библиотеку для расширения 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
Сарин На Вангканай
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();
Стефано Бальзаротти
источник