HttpRequestMessage - 解码 'parameter' - c# net40

HttpRequestMessage - Decoding 'parameter' - c# net40

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

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

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

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

我试过 encoding/decoding 但它总是在这里被剥离(除非双重编码:

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-parsing-for-encoded-reserved-characters-according-to-rfc-3986

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

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