我试图找出HttpClient
如何处理URL的一些不一致之处。HttpClient解码编码的网址?
我有以下的测试代码:
public async Task TestHttpClient()
{
var baseUrl = "https://api.twitter.com/1.1/search/tweets.json";
//var query = "(cafe OR boulangerie)";
var query = "(café OR boulangerie)";
var url = baseUrl + $"?q={Uri.EscapeDataString(query)}";
var httpClient = new HttpClient();
var response = await httpClient.GetAsync(url);
await response.Content.ReadAsStringAsync();
}
代码实际并不起作用,因为我们需要身份验证和其他的东西对Twitter的搜索。但它证明了我的问题。
变量url
将具有以下值: https://api.twitter.com/1.1/search/tweets.json?q=%28caf%C3%A9%20OR%20boulangerie%29
然而,看着提琴手的要求,我可以看到什么是实际发送的是:https://api.twitter.com/1.1/search/tweets.json?q=(caf%C3%A9%20OR%20boulangerie)
那么突然,在括号不再被编码。这对我来说很重要,因为我使用编码的查询字符串来计算我用来对Twitter进行身份验证的签名。所以我的签名将有百分比编码括号,并且请求不会,所以Twitter会抛出一个错误,并告诉我验证失败。
有趣的是,如果我用普通的e
而不是é
发送查询,那么括号就被编码在请求中!像这样:https://api.twitter.com/1.1/search/tweets.json?q=%28cafe%20OR%20boulangerie%29
我想这是某种错误HttpClient
?我能以某种方式解决这个问题吗?
这应该无关紧要时,它应该忽略括号时,忽略它。 –
不确定你的意思@ m.rogalski?问题是我需要使用实际发送的查询字符串来计算签名。所以当我计算签名时,我有%28和%29而不是(和)。发送的内容是(和)未编码的,但只有当我使用字母é时! – Joel