2013-03-09 9 views
28

Sto cercando di ottenere l'utente-agente in un self host Web API e lo sto facendo anch'io, oppure la stessa web API sta modificando la stringa dell'agente utente.Tentativo di ottenere lo user-agent dalla richiesta in asp.net web api self host

Ho provato a utilizzare diversi metodi per ottenere la stringa e tutti restituiscono gli stessi risultati, invece di eccetto "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, come Gecko) Chrome/26.0.1410.28 Safari/537.31 ", ottengo solo" Mozilla/5.0 ".

ho provato:

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

sto facendo questo sé ospite sbagliato, è così non ho un contesto con cui lavorare.

risposta

58

Il modo assolutamente semplice per ottenere l'user-agent pieno dall'interno di un WebAPI-controller è in questo modo:

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

esattamente lo stesso risultato come il passaggio manuale come questo:

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

Oops, ho capito, rispondendo a me stesso nel caso in cui qualcun altro si imbattesse in questo. Apparentemente lo user-agent viene sminuito.

questo mi dà l'user-agent completo:

// 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

Questo è un estremo over-complicazione. Solo 'ToString' il' Request.Headers.UserAgent' per ottenere lo stesso risultato. –

+2

Oppure solo Request.UserAgent. – user1154664

+3

user1154664, Request.UserAgent non fa parte di System.Net.Http.HttpRequestMessage. –

-2

La risposta è semplice provare quanto segue. È più breve e meno probabilità di rompere.

String userAgent; 
userAgent = Request.UserAgent; 

Vi darà una stringa simile a questa.

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

Documentazione: 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' è una richiesta per ASP.NET WebForms/MVC ed è ** non ** utilizzato in ASP.NET WebApi. –

+0

Ah, non capisco. Grazie. – Cesar

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

questo ha lavorato per me se desideri solo nome del browser quindi è sufficiente scrivere:

var browserdetail = request.browser 

E se si desidera che i client indirizzo IP digitare semplicemente:

var browserdetail = request.hostaddress e utilizzarlo per la generazione di chiave di token per autenticaton.

1

.NET core 2,0 (+)

Semplice come Request.Headers["User-Agent"] (restituisce come stringa);)

Problemi correlati