Я только что наткнулся на что-то довольно странное, и все же я не нашел в Интернете упоминаний о других, имеющих ту же проблему.
Если я попаду в свое приложение 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
я бы ожидал:
Я также проверил в Fiddler, и URL-адрес правильно передается на сервер (одним из возможных виновников может быть браузер, декодирующий URL-адрес перед отправкой).