Кодирование URL и маршрутизация?

Я использую настраиваемую маршрутизацию в контексте веб-форм. У меня есть несколько заголовков (часть моего пользовательского маршрута), в которых есть вопросительный знак. Когда я кодирую этот текст («Вопрос?»), А затем передаю его в свой маршрут, я получаю КОД ОШИБКИ HTTP 400. По-видимому, закодированный текст URL каким-то образом сбивает с толку диспетчер маршрутизации.

Может ли кто-нибудь предоставить контекст и объяснение этого? Кроме того, я думаю, мне не нужно URL-кодировать эти данные маршрута, а просто вырезать проблемные символы. Есть ли риски безопасности, если не использовать декодирование / кодирование URL-адресов? А какие проблемные персонажи? Список был бы полезен.

Спасибо!

Обновление: похоже, что символ% не разрешен в строке запроса на настраиваемом маршруте. С нетерпением ждем хороших отзывов по этому вопросу!


person Curtis White    schedule 01.06.2010    source источник
comment
Возможно, я ошибаюсь, но, для полной безопасности, можете ли вы кодировать base64 на отправляющей стороне и декодировать base64 на принимающей стороне?   -  person    schedule 01.06.2010
comment
@Barry, что противоречило бы цели иметь простые текстовые пути.   -  person Curtis White    schedule 02.06.2010


Ответы (1)


Вот что MS говорит о кодировке URL UrlEncode() ', которая гарантирует, что все браузеры будут правильно передавать текст в строках URL. Такие символы, как вопросительный знак (?), Амперсанд (&), косая черта (/) и пробелы, могут быть усечены или повреждены некоторыми браузерами. В результате эти символы должны быть закодированы в тегах или в строках запроса, где строки могут быть повторно отправлены браузером в строке запроса ».

Также следует кодировать только параметры запроса, иначе результат вызовет проблемы. Например, если у вас есть эта ссылка

http://www.contoso.com/articles.aspx?title=ASP.NET+Examples

И вы закодируете все, вы получите

http%3a%2f%2fwww.contoso.com%2farticles.aspx%3ftitle%3dASP.NET%2bExamples

Подробнее см. http://msdn.microsoft.com/en-us/library/zttxte6w.aspx

Я использую маршрутизацию ASP.net, которая поставляется с версией 4.0. Вот пример кода http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx. Вы можете легко манипулировать своими ссылками.

ОБНОВЛЕНИЕ: Microsoft внесла некоторые изменения в IIS7, которые могут вызвать проблемы с маршрутизацией. Поэтому попробуйте изменить настройку «Управляемый конвейерный режим» пула приложений с «Интегрированный» на «Классический».

person Thea    schedule 01.06.2010
comment
Я не кодирую весь маршрут, только запрос и моя точка используют кодирование URL-адреса в параметре запроса, который не работает для &,% и некоторых других неизвестных символов. Интересно, что когда я кодировал для и на webdev, это работало, но не на IIS 7, но есть некоторые, которые работают на webdev, а не на IIS 7. Я думаю, это был вопросительный знак. Я временно решил эту проблему, удалив эти символы из своих параметров. - person Curtis White; 02.06.2010
comment
Какие настройки пула приложений вы используете? - person Thea; 02.06.2010