44

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

文字列を取得するためにいくつかの方法を使用してみましたが、例外の "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (Gecko のような KHTML) 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();

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

4

5 に答える 5

84

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

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

次のような手動の手順を実行した場合とまったく同じ結果が得られます。

// var headers = request.Headers.GetValues("User-Agent");
// var userAgent = string.Join(" ", headers);
于 2013-05-28T12:42:06.983 に答える
0

おっと、それを理解し、他の誰かがこれに遭遇した場合に備えて自分で答えます。どうやら、ユーザーエージェントは切り刻まれています。

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

// 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();
}
于 2013-03-09T09:49:45.853 に答える
0
var context = new HttpContextWrapper(HttpContext.Current);
HttpRequestBase request = context.Request;
var browserdetail = request.UserAgent;

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

var browserdetail = request.browser

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

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

于 2017-05-26T12:27:04.847 に答える
-1

答えは簡単です。短くて壊れにくいです。

String userAgent;
userAgent = Request.UserAgent;

これに似た文字列が得られます。

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)

ドキュメント: http://msdn.microsoft.com/en-us/library/system.web.httprequest.useragent.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

于 2013-05-13T03:42:17.323 に答える