Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 正在尝试从asp.net web api自宿主中的请求获取用户代理_Asp.net Web Api_Self Hosting - Fatal编程技术网

Asp.net web api 正在尝试从asp.net web api自宿主中的请求获取用户代理

Asp.net web api 正在尝试从asp.net web api自宿主中的请求获取用户代理,asp.net-web-api,self-hosting,Asp.net Web Api,Self Hosting,我试图在WebAPI自宿主中获取用户代理,但我不是做错了,就是WebAPI本身正在更改用户代理字符串 我尝试过使用几种方法来获取字符串,它们都返回相同的结果,而不是例外的“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.SingleOrDefaul

我试图在WebAPI自宿主中获取用户代理,但我不是做错了,就是WebAPI本身正在更改用户代理字符串

我尝试过使用几种方法来获取字符串,它们都返回相同的结果,而不是例外的“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==“用户代理”).Value.First();
var header=request.Headers.UserAgent.SingleOrDefault().Product.ToString();
var header=request.Headers.GetValues(“用户代理”).FirstOrDefault();

我做错了吗?它是自宿主,所以我没有上下文可供使用。

哦,我想出来了,自己回答,以防其他人遇到这种情况。显然,用户代理被切碎了

这为我提供了完整的用户代理:

//默认为空的用户代理。
字符串userAgent=“”;
//获取用户代理。
if(Request.Headers.Contains(“用户代理”))
{
var headers=request.headers.GetValues(“用户代理”);
StringBuilder sb=新的StringBuilder();
foreach(标头中的var标头)
{
某人附加(标题);
//重新添加拆分用户代理字符串时剥离的空间。
某人加上(“”);
}
userAgent=sb.ToString().Trim();
}

答案很简单,请尝试以下方法。它比较短,也不太可能断裂

String userAgent;
userAgent = Request.UserAgent;
它会给你一个类似于这个的字符串

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

文档:

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

var userAgent = Request.Headers.UserAgent.ToString();
它给出的结果与执行以下手动步骤完全相同:

// var headers = request.Headers.GetValues("User-Agent");
// var userAgent = string.Join(" ", headers);
如果您只需要浏览器名称,则只需写下:

var browserdetail = request.browser
如果您想要客户端ip地址,只需执行以下操作:

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

.NET核心2.0(+)
简单到
Request.Headers[“用户代理”]
(返回字符串);)

这是一种极端的过度复杂化。只需
ToString
Request.Headers.UserAgent即可获得相同的结果。或者只需Request.UserAgent.user1154664,Request.UserAgent不是System.Net.Http.HttpRequestMessage的一部分。此外,严重的是,它甚至是字符串连接的过度复杂化;将来,只需使用
string.Join
即可。(在这种情况下甚至没有必要!)
System.Web.HttpRequest
是对ASP.NET WebForms/MVC的请求,在ASP.NET WebApi中没有使用。啊,我明白了,我没有意识到这一点。谢谢
var browserdetail = request.browser