我试图发送一个请求,将其用户代理设置为带有冒号的东西,但HttpRequestMessage抱怨冒号是一个无效字符。
确切的代码如下所示:
HttpClient client = new HttpClient();
var request = new HttpRequestMessage()
{
RequestUri = new Uri("some-uri"),
Method = HttpMethod.Post
};
request.Headers.Add("User-Agent", "Sample:Text");
// then send the request...我查看了这是如此的帖子,您可以在其中看到用户代理和这个RFC的EBNF,它们指定了CTL是什么。
第一个链接显示以下是一个有效的用户代理:
token = 1*<any CHAR except CTLs or separators>
第二个链接将CTL定义为:
any US-ASCII control character (octets 0 - 31) and DEL (127)
但是,冒号(:)在ASCII表上是58,所以我不明白为什么这是一个问题。
我认为HttpRequestMessage不喜欢它中的冒号,因为它不是逃跑的--它可能认为它是一个分隔符。但我试着用单引号、双引号等来转义。
有什么办法可以逃避我错过的吗?
或者换句话说,如何正确地在:的用户代理头中发送冒号( HttpRequestMessage )
发布于 2015-04-29 14:45:39
就像我怀疑的那样,这是一个逃跑的问题。HttpRequestMessage似乎不处理自动转义。
在将冒号添加到Uri.EscapeDataString()头之前,我可以使用它来转换冒号。在处理端点上的用户代理时,必须使用Uri.UnescapeDataString()。
不太漂亮,但看起来很管用。
https://stackoverflow.com/questions/29946698
复制相似问题