2013-03-09 10 views
28

Próbuję pobrać klienta użytkownika do hosta sieci web api i robię to źle, lub sam interfejs sieciowy zmienia ciąg agenta użytkownika.Próba uzyskania klienta użytkownika z żądania w asp.net web api self host

Próbowałem użyć kilku metod, aby uzyskać ciąg i wszystkie zwracają takie same wyniki, zamiast wyjątków "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, jak Gecko) Chrome/26.0.1410.28 Safari/537,31 ", dostaję tylko" Mozilla/5.0 ".

Próbowałem:

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(); 

robię to źle, to self hosta więc nie mam kontekstu pracować.

Odpowiedz

58

Absolutnie Najprostszym sposobem, aby uzyskać pełną user-agent od wewnątrz WebAPI regulator jest w ten sposób:

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

Daje dokładnie ten sam wynik, wykonując krok ręczny w następujący sposób:

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

Ups, wymyślili to, odpowiadając na to sam, na wypadek, gdyby ktoś inny w to wszedł. Najwyraźniej agent użytkownika zostaje posiekany.

To daje mi pełną 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(); 
} 
+2

To skrajny over-komplikacji. Po prostu 'ToString'' Request.Headers.UserAgent', aby uzyskać ten sam wynik. –

+2

Lub po prostu Request.UserAgent. – user1154664

+3

user1154664, Request.UserAgent nie jest częścią System.Net.Http.HttpRequestMessage. –

-2

Odpowiedź jest prosta spróbować wykonać następujące czynności. Jest krótszy i mniej podatny na złamanie.

String userAgent; 
userAgent = Request.UserAgent; 

Poda ci strunę podobną do tej.

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

Dokumentacja: 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' jest żądaniem dla ASP.NET WebForms/MVC i ** nie jest używane ** w ASP.NET WebApi. –

+0

Ah gotcha, nie zdawałem sobie z tego sprawy. Dzięki. – Cesar

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

ten pracował dla mnie, jeśli chcesz tylko nazwę przeglądarki, a następnie po prostu napisać:

var browserdetail = request.browser 

A jeśli chcesz klientom adres ip a następnie po prostu zrobić:

var browserdetail = request.hostaddress i użyć go do generowania klucza tokenu do uwierzytelniania.

1

NET Rdzeń 2,0 (+)

tak proste, jak Request.Headers["User-Agent"] (powraca jako ciąg);)

Powiązane problemy