Я пытаюсь отправить запрос на URL-адрес, подобный этому "http://mysite.dk/tværs?test=æ", из приложения asp.net, и у меня возникают проблемы с корректным кодированием строки запроса. Или, возможно, строка запроса закодирована правильно, служба, которой я являюсьподключение к просто не понимает это правильно.
Я попытался отправить запрос в разные браузеры и записал, как они кодируют запрос с помощью Wireshark, и я получаю следующие результаты:
Firefox: http://mysite.dk/tv%C3%A6rs?test=%E6
Ie8: http://mysite.dk/tv%C3%A6rs?test=\xe6
Curl: http://mysite.dk/tv\xe6rs?test=\xe6
Firefox, IE и Curl получают правильные результаты от службы. Обратите внимание, что они по-разному кодируют датский специальный символ 'æ' в строке запроса.
Когда я отправляю запрос из моего приложения asp.net с помощью HttpWebRequestURL-адрес кодируется следующим образом:
http://mysite.dk/tv%C3%A6rs?test=%C3%A6
Кодирует строку запроса так же, как часть пути URL. Удаленная служба не понимает эту кодировку, поэтому я не получаю правильный ответ.
Для записи 'æ' (U + 00E6) - это% E6 в ISO-LATIN-1 и% C3% A6 в UTF-8.
I cЯ мог бы изменить удаленную службу, чтобы она принимала строку запроса в кодировке UTF-8, но тогда служба перестала бы работать в браузерах, и я не очень заинтересован в этом.Есть ли способ указать .NET, что он не должен кодировать строки запросов с помощью UTF-8?
Я создаю веб-запрос следующим образом:
var req = WebRequest.Create("http://mysite.dk/tværs?test=æ") as HttpWebRequest;
Но проблема, похоже, возниклаиз System.Uri, который очевидно используется внутри WebRequest.Create:
var uri = new Uri("http://mysite.dk/tværs?test=æ");
// now uri.AbsolutePath == "http://mysite.dk/tv%C3%A6rs?test=%C3%A6"