2015-10-07 4 views
0

Я интегрируюсь с сторонним API через запрос PUT (обязательно). Однако URL-адрес не соответствует стандарту.HttpRequestMessage - параметр декодирования '- C# net40

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

Обратите внимание, что номер резервирования не находится в теле или не как параметр, его просто a/then number.

Они закодировали номер бронирования (запрошенный через другой вызов 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)); 

Update: Это было дизайнерское решение, сделанное Microsoft:

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

Решение с их точки зрения заключается в добавлении параметра в файл web.config. Но это библиотека классов и поэтому используется более , чем один проект. Я не хочу изменять это, если мне действительно не нужно

ответ