URL с двойным кодированием полностью декодируется в ASP.NET - PullRequest
0 голосов
/ 23 марта 2010

Я только что натолкнулся на что-то довольно странное, и тем не менее я не нашел упоминаний о других людях, имеющих такую ​​же проблему.

Если я получу в приложении ASP.NET URL с двойным кодированием, Request["myQueryParam"] выполнит для меня двойное декодирование запроса. Это нежелательно, поскольку я дважды кодировал строку запроса по уважительной причине.

Могут ли другие подтвердить, что я не делаю что-то явно не так, и почему это произойдет. Было бы также неплохо решить эту проблему, не прибегая к неприятному разбору строк запроса!

Например, если вы нажмете на URL: http://localhost/MyApp?originalUrl=http%3a%2f%2flocalhost%2fAction%2fRedirect%3fUrl%3d%252fsomeUrl%253futm_medium%253dabc%2526utm_source%253dabc%2526utm_campaign%253dabc

(для справки% 25 - символ%)

Затем посмотрите на Request["originalUrl"] (страницу или контроллер), в которой возвращается строка:

http://localhost/Action/Redirect?Url=/someUrl?utm_medium=abc&utm_source=abc&utm_campaign=abc

Я бы ожидал:

http://localhost/Action/Redirect?Url=%2fsomeUrl%3futm_medium%3dabc%26utm_source%3dabc%26utm_campaign%3dabc

Я также зарегистрировался в Fiddler, и URL-адрес передается на сервер правильно (одним из возможных виновников мог быть браузер, декодирующий URL-адрес перед отправкой).

Ответы [ 2 ]

3 голосов
/ 23 марта 2010

Расслабьтесь, обработка закодированных параметров HttpRequest не прерывается.

Фактически, как гиперссылка, так и прямая навигация из адресной строки приводят к вашему «ожидаемому» результату в Запросе.

<a href="WebForm1.aspx?originalUrl=http%3a%2f%2flocalhost%2fAction%2fRedirect%3fUrl%3d%252fsomeUrl%253futm_medium%253dabc%2526utm_source%253dabc%2526utm_campaign%253dabc">HEY</a>

и

WebForm1.aspx?originalUrl=http%3a%2f%2flocalhost%2fAction%2fRedirect%3fUrl%3d%252fsomeUrl%253futm_medium%253dabc%2526utm_source%253dabc%2526utm_campaign%253dabc

Результат: http://localhost/Action/Redirect?Url=%2fsomeUrl%3futm_medium%3dabc%26utm_source%3dabc%26utm_campaign%3dabc

Вы должны заранее что-то сделать с URL-адресом, например, перенаправить или заполнить свойство NavigateUrl элемента управления asp.net и позволить asp.net отрисовать его, который может выполнить первое декодирование, прежде чем оно попадет на целевую страницу.

0 голосов
/ 23 марта 2010

Я думаю, что это связано с вашим браузером.

Глядя на Документ безопасности браузера Google , следующие браузеры переводят незарезервированные последовательности% nn в адресную строку: MSIE7, MSIE8, FF3, Opera, Chrome.

В каких браузерах вы тестировали этот результат?

...