我刚刚遇到一些非常奇怪的事情,但我还没有发现其他人有相同问题的互联网。
如果我使用双重编码的网址点击我的ASP.NET应用程序,那么Request["myQueryParam"]
将对我执行查询的双重解码。这是不可取的,因为我有充分的理由对我的查询字符串进行了双重编码。
其他人可以确认我没有做出明显错误的事情,以及为什么会这样。一个防止它的解决方案,没有做一些讨厌的查询字符串解析,也会很棒!
(参考%25是%符号)
然后查看返回的字符串Request["originalUrl"]
(页面或控制器):
http://localhost/Action/Redirect?Url=/someUrl?utm_medium=abc&utm_source=abc&utm_campaign=abc
我希望:
我还检查了Fiddler,并且URL正确地传递给服务器(一个可能的罪魁祸首可能是浏览器在发送之前对URL进行解码)。
答案 0 :(得分:3)
放松,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
您必须事先使用URL执行某些操作,例如重定向或填充asp.net控件的NavigateUrl属性,并让asp.net呈现它,它可能会在它到达目标页面之前执行第一次解码。
答案 1 :(得分:0)
我认为这与您的浏览器有关。
查看Google's Browser Security Document,以下浏览器会在地址栏中翻译非保留的%nn序列:MSIE7,MSIE8,FF3,Opera,Chrome。
您在哪些浏览器中测试过此结果?