首页 文章

试图在asp.net web api self host中从请求中获取用户代理

提问于
浏览
35

我正在尝试在web api自托管主机中获取用户代理,我要么做错了,要么web api本身正在改变用户代理字符串 .

我尝试使用几种方法来获取字符串,它们都返回相同的结果,而不是例外的“Mozilla / 5.0(Windows NT 6.2; WOW64)AppleWebKit / 537.31(KHTML,像Gecko)Chrome / 26.0.1410.28 Safari /537.31“,我只得到”Mozilla / 5.0“ .

我试过了:

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

我做错了,它是自我主持人所以我没有上下文可以使用 .

5 回答

  • -1

    从WebAPI控制器中获取完整用户代理的绝对最简单的方法是:

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

    它给出 exactly the same result 作为手动步骤,如下所示:

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

    .NET Core 2.0()

    Request.Headers["User-Agent"] 一样简单(以字符串形式返回);)

  • 69

    哎呀,想出来,自己回答,以防其他人遇到这个问题 . 显然,用户代理被砍掉了 .

    这给了我完整的用户代理:

    // 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();
    }
    
  • 0
    var context = new HttpContextWrapper(HttpContext.Current);
    HttpRequestBase request = context.Request;
    var browserdetail = request.UserAgent;
    

    如果您只想要浏览器名称,那么这对我有用,然后简单地写:

    var browserdetail = request.browser
    

    如果你想要客户端IP地址,那么只需:

    var browserdetail = request.hostaddress 并使用它来生成用于验证的令牌密钥 .

  • 4

    答案很简单,请尝试以下方法 . 它更短,不太可能破碎 .

    String userAgent;
    userAgent = Request.UserAgent;
    

    它会给你一个类似于这个的字符串 .

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

    文件:http://msdn.microsoft.com/en-us/library/system.web.httprequest.useragent.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

相关问题