HttpRequestMessage - 解码'参数' - c#net40

时间:2015-10-07 12:50:59

标签: httprequest put

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

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

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

他们编码了预订号码(通过另一个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));

更新:这是微软做出的一项设计决定:

https://connect.microsoft.com/VisualStudio/feedback/details/511010/erroneous-uri-parsing-for-encoded-reserved-characters-according-to-rfc-3986

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