2013-03-09 3 views
28

Я пытаюсь получить пользовательский агент в собственном хосте web api, и я либо делаю это неправильно, либо сам web api изменяет строку пользовательского агента.Попытка получить пользовательский агент из запроса в asp.net web api self host

Я попытался использовать несколько методов для получения строки, и все они возвращают те же результаты, вместо того, чтобы исключить «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(); 

я это делаю неправильно, это сам хозяин, так что я не контекст для работы.

ответ

58

Абсолютно простой способ, чтобы получить полный агент пользователя из внутри WebAPI-контроллера, делая это:

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

Это дает точно такой же результат как сделать ручной шаг примерно так:

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

Ой, разобрался, отвечая на него сам, если кто-то еще столкнется с этим. Видимо, пользователь-агент получает измельчение.

Это дает мне полный агент пользователя:

// 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(); 
} 
+2

Это крайний более-осложнение. Просто «ToString'' Request.Headers.UserAgent' получит тот же результат. –

+2

Или просто Request.UserAgent. – user1154664

+3

user1154664, Request.UserAgent не входит в System.Net.Http.HttpRequestMessage. –

-2

Ответ прост попробовать следующее. Это короче и реже ломается.

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

+3

'System.Web.HttpRequest' - это запрос для ASP.NET WebForms/MVC и ** не используется ** в ASP.NET WebApi. –

+0

Ага, не понял этого. Благодарю. – Cesar

0
var context = new HttpContextWrapper(HttpContext.Current); 
HttpRequestBase request = context.Request; 
var browserdetail = request.UserAgent; 

Это работает для меня, если вы хотите только имя браузера, то просто написать:

var browserdetail = request.browser 

И если вы хотите клиентов IP-адрес, то просто сделать:

var browserdetail = request.hostaddress и использовать его для генерации маркера ключа для аутентификации.

1

.NET 2.0 Ядро (+)

так просто, как Request.Headers["User-Agent"] (возвращается как строка);)

 Смежные вопросы

  • Нет связанных вопросов^_^