44

我试图在 web api 自主机中获取用户代理,但我做错了,或者 web api 本身正在改变用户代理字符串。

我尝试使用几种方法来获取字符串,它们都返回相同的结果,而不是例外的“Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like 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();

我做错了吗,它是自托管的,所以我没有可以使用的上下文。

4

5 回答 5

84

从 WebAPI 控制器内部获取完整用户代理的绝对最简单的方法是执行以下操作:

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

它给出的结果与执行如下手动步骤完全相同:

// var headers = request.Headers.GetValues("User-Agent");
// var userAgent = string.Join(" ", headers);
于 2013-05-28T12:42:06.983 回答
8

.NET Core 2.0(+)

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

于 2017-10-14T21:12:47.297 回答
0

哎呀,想通了,自己回答,以防其他人遇到这个问题。显然用户代理被切碎了。

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

// 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();
}
于 2013-03-09T09:49:45.853 回答
0
var context = new HttpContextWrapper(HttpContext.Current);
HttpRequestBase request = context.Request;
var browserdetail = request.UserAgent;

如果您只想要浏览器名称,这对我有用,然后只需编写:

var browserdetail = request.browser

如果您想要客户端 IP 地址,那么只需执行以下操作:

var browserdetail = request.hostaddress并将其用于生成用于身份验证的令牌密钥。

于 2017-05-26T12:27:04.847 回答
-1

答案很简单,试试下面的。它更短,更不容易折断。

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

于 2013-05-13T03:42:17.323 回答