web-dev-qa-db-ja.com

asp.net Web APIセルフホストのリクエストからユーザーエージェントを取得しようとしています

Web APIセルフホストでユーザーエージェントを取得しようとしていますが、間違っているか、Web API自体がユーザーエージェント文字列を変更しています。

文字列を取得するためにいくつかの方法を使用してみましたが、例外は「Mozilla/5.0(Windows NT 6.2; WOW64)AppleWebKit/537.31(KHTML、Geckoなど)Chrome/26.0.1410.28 Safari」ではなく、すべて同じ結果を返します/537.31」、「Mozilla/5.0」のみが表示されます。

私はもう試した:

var header = request.Headers.SingleOrDefault(h => h.Key == "User-Agent").Value.First();

var header = request.Headers.UserAgent.SingleOrDefault().Product.ToString();

var header = request.Headers.GetValues("User-Agent").FirstOrDefault();

私はこれを間違っていますか、それは自己ホストなので、作業するコンテキストがありません。

39
casualtek

WebAPIコントローラー内から完全なユーザーエージェントを取得する絶対に最も簡単な方法は、次のようにすることです。

var userAgent = Request.Headers.UserAgent.ToString();

正確に同じ結果を与えます。これは、次のような手動ステップを実行する場合と同じです。

// var headers = request.Headers.GetValues("User-Agent");
// var userAgent = string.Join(" ", headers);
73
Seb Nilsson

。NET Core 2.0(+)

単純な Request.Headers["User-Agent"](文字列として返されます);)

他の誰かがこれに出くわした場合に備えて、自分で答えて、解決しました。どうやら、ユーザーエージェントが切断されます。

これにより、完全なユーザーエージェントが得られます。

// Default empty user agent.
String userAgent = "";

// Get user agent.
if (Request.Headers.Contains("User-Agent"))
{
    var headers = request.Headers.GetValues("User-Agent");

    StringBuilder sb = new StringBuilder();

    foreach (var header in headers)
    {
        sb.Append(header);

        // Re-add spaces stripped when user agent string was split up.
        sb.Append(" ");
    }

    userAgent = sb.ToString().Trim();
}
0
casualtek
var context = new HttpContextWrapper(HttpContext.Current);
HttpRequestBase request = context.Request;
var browserdetail = request.UserAgent;

ブラウザ名だけが必要な場合は、これは私にとってはうまくいきました。

var browserdetail = request.browser

クライアントのIPアドレスが必要な場合は、次のようにします。

var browserdetail = request.hostaddressおよび認証用のトークンキーの生成に使用します。

0
Gaurav Dubey