有没有办法在HttpClient的Uri中发送转义的句点字符?

13 浏览
0 Comments

有没有办法在HttpClient的Uri中发送转义的句点字符?

我正在尝试使用带有URL中的句点的GET http请求

例如:http://testsite.com/TestEndpoint/Members/first%2Elast%40testemail%2Ecom

在上面的示例中,first.last@testemail.com被转义为first%2Elast%40testemail%2Ecom

问题是HttpClient从字符串创建一个Uri,它将%2E解码为.(URL的一部分变为first.last%40testmail.com),这导致公共API抛出端点未找到错误。

我可以在Postman中进行此请求,它可以正常工作,但从.net HttpClient或WebRequest.Create失败。

有没有办法告诉HttpClient不要解码URL?

var uri = new Uri("http://testsite.com/TestEndpoint/Members/first%2Elast%40testemail%2Ecom");

我还尝试过在.NET中创建Uri会自动对传递的字符串中的所有参数进行URL解码,但这没有效果,不确定该功能是否损坏或不再受支持。

0
0 Comments

在使用HttpClient发送Uri时,如果需要包含转义的句点字符,可能会遇到问题。下面是一个解决该问题的方法:

你可以尝试使用HttpUtility.UrlEncode方法来进一步"转义"你想要的URL,例如:

client.GetAsync(new Uri("http://testsite.com/testendpoint?members=" + HttpUtility.UrlEncode("first%2Elast%40testemail%2Ecom"));

但是这种方法是无效的,因为它会将字符串变成testsite.com/testendpoint/first%252Elast%2540testemail%252Ecom

你不应该将转义后的字符串作为参数传递给UrlEncode方法,而应该传递未转义的字符串。如果将转义后的字符串传递给Uri构造函数,也会产生同样的问题,因为它生成的字符串是一样的。

0