Asp.net Coreでユーザーのブラウザー名(user-agent)を取得する方法


回答:


151

これは簡単なことだったと思います。答えを得たRequest.Headers["User-Agent"].ToString()

ありがとう


9
これにより、すべてのブラウザー名が返されました
kobosh

3
@koboshRequest.Headers["User-Agent"].ToString()
Andriy Tolstoy

9
リクエストにUser-Agentがない場合にKeyNotFoundExceptionが発生すると、これが発生することに注意してください。必ず最初に.ContainsKeyを使用して確認してください!
user169771

12
スクラッチ。何らかの理由で ""を返すだけです。一貫性のためのHooray ...
user169771

35
Request.Headers[HeaderNames.UserAgent]文字列リテラルを回避した方がよい場合もあります(Core 1.0では機能しなかった可能性がありますが、不明です)
Will Dean

19

私にとって、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 あなたはalseのようなOSの詳細情報を取得することができますc.OS.Family;


2
まさに私が必要としたもの!
Eric

2
これは、すべてのブラウザ名のリストではなく、ブラウザがUser-Agentとして設定しているものです。UAParserは、これらすべての名前を取得し、実際のブラウザーとOSを判別する方法を知っています。
ジョンC

15

便利な小さなショートを書いてくれてありがとう
FindOutIslamNow

そのリンクが最良の答えです。User-Agent文字列は、バージョン情報を取得するために解読および解析する必要がある文字列です。そこで提供されるクラスは、すべてのハードワークを実行します。
JustLooking 2019

ありがとうございました!フィードバックのために更新!
Uzay

8

ASP.NET Coreを拡張して、Wangkanai.DetectionでのWebクライアントブラウザー情報検出をサポートするライブラリを開発しました。これにより、ブラウザー名を識別できるようになります。

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

0

この.nu​​getパッケージをインストールする

次のようなクラスを作成します。

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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.