HttpRequestMessage - 解码 'parameter' - c# net40



我正在通过PUT请求(必需)与第三方API集成。然而,URL不是我认为标准的。

https://standard.com/services/U2FsdGVkX18qfVhkTn7JsiXWA8q4vco7vpU%2BmeKqiXKafdKxfJqsq1ELGFOHIilpoR7VXqUcg89yXiabxjjfVXiRmVqGOffsKw%2BKLp5OU6%2FJZaTyn6BYxi%2F10ndtWFLG2KgxRmm%2BxtgTAopUi6m7wWTnSoAlL8qoS%2F3UbiippOw%3D。

请注意,预订号码不在正文中,也不是作为参数,它只是一个/then号码。

他们已经编码了预订号(通过另一个API调用请求)。问题是我正在使用HttpRequestMessage,这将%2F解码为/。也就是说它失败了。我尝试过对特殊字符进行双重编码,但这并没有返回一致的响应,有时它会失败,有时它会工作(使用不同的预订号,只有%2F是双重编码)。是否有办法阻止HttpRequestMessage解码URL的一部分?

我尝试过编码/解码,但它总是被剥离在这里(除非双编码:

var path = "https://standard.com/services/U2FsdGVkX18qfVhkTn7JsiXWA8q4vco7vpU%2BmeKqiXKafdKxfJqsq1ELGFOHIilpoR7VXqUcg89yXiabxjjfVXiRmVqGOffsKw%2BKLp5OU6%2FJZaTyn6BYxi%2F10ndtWFLG2KgxRmm%2BxtgTAopUi6m7wWTnSoAlL8qoS%2F3UbiippOw%3D";
var requestMessage = new HttpRequestMessage(HttpMethod.PUT, path);
var requestMessage = (HttpWebRequest)WebRequest.Create(path);
var requestMessage = new HttpRequestMessage(method, new Uri(path));

更新:这是由Microsoft做出的设计决定:

https://connect.microsoft.com/visualstudio/feedback/details/511010/erroneous - uri -解析- - -保留字符编码显示- rfc - 3986

从他们的角度来看,解决方案是在. config。但这是一个类库,因此被更多人使用而不是一个项目。我不想改变它除非我真的需要

这是Microsoft的设计决策:https://connect.microsoft.com/VisualStudio/feedback/details/511010/erroneous-uri-parsing-for-encoded-reserved-characters-according-to-rfc-3986

最新更新