加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – HttpClient解码编码的Url?

发布时间:2020-12-15 22:41:46 所属栏目:百科 来源:网络整理
导读:我试图弄清楚HttpClient如何处理URL的一些不一致. 我有以下测试代码: 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
我试图弄清楚HttpClient如何处理URL的一些不一致.

我有以下测试代码:

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=(caféORboulangerie)

但是,看着Fiddler的请求,我可以看到实际发送的是:https://api.twitter.com/1.1/search/tweets.json?q =(caféORboulangerie)

所以突然间,括号不再被编码.这在我的情况下很重要,因为我使用编码的查询字符串来计算我用来对twitter进行身份验证的签名.所以我的签名将包含百分比编码的括号而请求不会,因此Twitter会抛出错误并告诉我验证失败.

有趣的是,如果我使用常规e而不是é发送查询,则括号将在请求中进行编码!像这样:https://api.twitter.com/1.1/search/tweets.json?q =(cafe OR boulangerie)

我想这是HttpClient的某种错误?我可以以某种方式解决这个问题吗?

解决方法

所以这对于Uri如何编码和解码带有和不带有unicode字符的URL是不同的: https://github.com/dotnet/corefx/issues/15865.

我的解决方案是解析Uri.AbsoluteUri的内容(以相同,不一致的方式对url进行编码),并在计算身份验证的签名时使用它.而不是像我之前使用的那样使用Uri.EscapeDataString.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读