2013-03-09 19 views
28

Tôi đang cố gắng để có được tác nhân người dùng trong một máy chủ web api tự và tôi đang làm sai, hoặc api web chính nó đang thay đổi chuỗi tác nhân người dùng.Đang cố gắng để có được tác nhân người dùng từ yêu cầu trong trang web api tự host api

Tôi đã thử sử dụng một số phương pháp để nhận chuỗi và tất cả đều trả về cùng một kết quả, thay vì ngoại trừ "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, như Gecko) Chrome/26.0.1410.28 Safari/537.31 ", tôi chỉ nhận được" Mozilla/5.0 ".

Tôi đã thử:

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

Tôi có làm tự này chủ sai, đó là vì vậy tôi không có một bối cảnh để làm việc với.

Trả lời

58

Cách hoàn toàn đơn giản nhất để có được đầy đủ user-agent từ bên trong một WebAPI-controller là bằng cách làm này:

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

Nó cung cấp cho chính xác kết quả tương tự khi thực hiện bước thủ công như sau:

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

Rất tiếc, đã tìm ra, tự trả lời trong trường hợp có ai đó gặp phải vấn đề này. Rõ ràng là tác nhân người dùng bị cắt nhỏ.

này mang lại cho tôi đầy đủ 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

Đó là một cực đoan quá phức tạp. Chỉ cần 'ToString'' Request.Headers.UserAgent' để có được kết quả tương tự. –

+2

Hoặc chỉ yêu cầu.UserAgent. – user1154664

+3

user1154664, Request.UserAgent không phải là một phần của System.Net.Http.HttpRequestMessage. –

-2

Câu trả lời rất đơn giản thử những điều sau đây. Nó ngắn hơn và ít có khả năng phá vỡ.

String userAgent; 
userAgent = Request.UserAgent; 

Nó sẽ cung cấp cho bạn một chuỗi tương tự như chuỗi này.

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

Tài liệu: 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' là một yêu cầu cho ASP.NET WebForms/MVC và không được sử dụng trong ASP.NET WebApi. –

+0

Ah gotcha, không nhận ra điều đó. Cảm ơn. – Cesar

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

này làm việc cho tôi nếu bạn muốn chỉ tên trình duyệt sau đó chỉ cần viết:

var browserdetail = request.browser 

Và nếu bạn muốn khách hàng địa chỉ ip sau đó chỉ cần làm:

var browserdetail = request.hostaddress và sử dụng nó cho tạo ra chìa khóa thẻ cho authenticaton.

1

NET Lõi 2,0 (+)

Như đơn giản như Request.Headers["User-Agent"] (lợi nhuận như string);)

Các vấn đề liên quan