2014-12-01 141 views
-1

我试图得到一些API用户的要求一样,他们使用的设备和操作系统的信息,所以我想它是这样的:的Web API HttpContext.Current.Request.UserAgent总是空

private string GetDeviceInfo() 
    { 
     var userAgent = HttpContext.Current.Request.UserAgent; 
     var uaParser = Parser.GetDefault(); 
     var c = uaParser.Parse(userAgent); 
     return c.Device + "|" + c.OS + "|" + c.UserAgent; 
    } 

HttpContext.Current.Request.UserAgent始终为空!我搜索了一下,并尝试了这个link,你能告诉我什么是错的吗?

+0

样品有你踩到直通代码..?如果是的话'userAgent'中的值也可以看看这篇文章.. http://www.codeproject.com/Articles/42347/How-to-Detect-Browser-Capabilities-in-ASP-NET – MethodMan 2014-12-01 15:49:32

+0

可能当你的客户没有发送用户代理标题。你如何访问你的api? @Figo – 2014-12-01 15:53:54

+0

@DJKRAZE'userAgent'为'null',因为'HttpContext.Current.Request.UserAgent'为'null',它会抛出一个异常'System.ArgumentNullException:值不能为空。参数名称:在UAParser.Parser.Parsers的System.Text.RegularExpressions.Regex.Match(String input)处输入。|| c_DisplayClass43'1。| Create | b41(String input)'! – 2014-12-01 16:07:43

回答

4

Request.UserAgent只是HTTP请求中的"user agent" header的值。浏览器会自动发送所有请求(包括AJAX),没有浏览器的客户端通常不会包含这样的头文件。

如果你的“客户端”不是浏览器,它需要自己添加适当的值。如果使用HttpWebRequest

var request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com"); 
request.UserAgent="My custom user agent string"; 
var response = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
+0

是的我试图用控制台应用程序和网络浏览器调用我的API,我得到了不同,谢谢你的答案。 – 2014-12-02 07:34:51