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();
私はこれを間違っていますか、それは自己ホストなので、作業するコンテキストがありません。
WebAPIコントローラー内から完全なユーザーエージェントを取得する絶対に最も簡単な方法は、次のようにすることです。
var userAgent = Request.Headers.UserAgent.ToString();
正確に同じ結果を与えます。これは、次のような手動ステップを実行する場合と同じです。
// var headers = request.Headers.GetValues("User-Agent");
// var userAgent = string.Join(" ", headers);
単純な 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();
}
var context = new HttpContextWrapper(HttpContext.Current);
HttpRequestBase request = context.Request;
var browserdetail = request.UserAgent;
ブラウザ名だけが必要な場合は、これは私にとってはうまくいきました。
var browserdetail = request.browser
クライアントのIPアドレスが必要な場合は、次のようにします。
var browserdetail = request.hostaddress
および認証用のトークンキーの生成に使用します。