【问题标题】:Web api HttpContext.Current.Request.UserAgent is always nullWeb api HttpContext.Current.Request.UserAgent 始终为空
【发布时间】:2014-12-02 00:13:00
【问题描述】:

我正在尝试获取一些 api 用户请求的信息,例如他们使用的设备和操作系统,所以我这样尝试:

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,你能告诉我有什么问题吗?

【问题讨论】:

  • 你有没有通过代码..?如果是这样,userAgent 中的值是什么也看看这个帖子。codeproject.com/Articles/42347/…
  • 可能是您的客户端未发送用户代理标头。你是如何访问你的api的? @Figo
  • @DJKRAZE userAgentnull,因为 HttpContext.Current.Request.UserAgentnull 它会抛出一种异常 System.ArgumentNullException: Value cannot be null. Parameter name: input at System.Text.RegularExpressions.Regex.Match(String input) at UAParser.Parser.Parsers.||c_DisplayClass431.|Create|b41(String input)` !
  • @ZohaibAslam 我的客户直接调用 api /api/request,我应该强制客户发送这些信息吗?如果有怎么办?

标签: c# asp.net asp.net-web-api


【解决方案1】:

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

【讨论】:

  • 是的,我尝试使用控制台应用程序和网络浏览器调用我的 api,我得到了区别,谢谢您的回答。
猜你喜欢
  • 1970-01-01
  • 2013-01-15
  • 1970-01-01
  • 2019-03-06
  • 2017-08-09
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多