Параметры кодирования для URL - PullRequest
39 голосов
/ 23 февраля 2011

У меня есть приложение Silverlight, которое создает URL. Этот URL-адрес является вызовом службы на основе REST. Эта служба ожидает один параметр, который представляет местоположение. Расположение в форме "город, штат". Чтобы создать этот URL, я звоню по следующему коду:

string url = "http://www.domain.com/myService.svc/";
url += HttpUtility.UrlEncode(locationTextBox.Text);

Если пользователь вводит "chicago, il" в locationTextBox, результат выглядит следующим образом:

http://www.domain.com/myService.svc/chicago%2c+il

На самом деле я ожидал, что URL будет выглядеть так:

http://www.domain.com/myService.svc/chicago,%20il

При тестировании моего сервиса через URL браузера, ожидаемый мной вариант работает. Однако генерируемый URL не работает. Что я делаю не так?

Ответы [ 3 ]

68 голосов
/ 23 февраля 2011

Я бы рекомендовал Uri . EscapeDataString вместо использования функций HttpUtility .См. Обсуждение в Server.UrlEncode против HttpUtility.UrlEncode .

6 голосов
/ 23 февраля 2011

Попробуйте использовать метод UrlPathEncode ().Просмотрите замечания по адресу: http://msdn.microsoft.com/en-us/library/h10z5byc.aspx

Цитата:

Вы можете кодировать URL-адрес, используя метод UrlEncode () или метод UrlPathEncode ().Однако методы возвращают разные результаты.Метод UrlEncode () преобразует каждый пробел в символ плюс (+).Метод UrlPathEncode () преобразует каждый символ пробела в строку «% 20», которая представляет пробел в шестнадцатеричной записи.Используйте метод UrlPathEncode () при кодировании части пути URL-адреса, чтобы гарантировать согласованный декодированный URL-адрес независимо от того, какая платформа или браузер выполняет декодирование.

0 голосов
/ 23 февраля 2011

Самый безопасный вариант - использовать библиотеку AntiXss.Он имеет более стандартные (и безопасные) версии для кодирования содержимого для различных целей (например, кодирование Url, кодирование Html и HtmlAttribute и т. Д.).есть старая версия 3.1, доступная для скачивания с сайта MS (http://www.microsoft.com/downloads/details.aspx?FamilyId=051ee83c-5ccf-48ed-8463-02f56a6bfc09),, которая будет работать со старыми версиями .NET, и новая версия http://wpl.codeplex.com/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...