双重编码的URL在ASP.NET中完全解码

时间:2010-03-23 17:49:45

标签: asp.net urlencode

我刚刚遇到一些非常奇怪的事情,但我还没有发现其他人有相同问题的互联网。

如果我使用双重编码的网址点击我的ASP.NET应用程序,那么Request["myQueryParam"]将对我执行查询的双重解码。这是不可取的,因为我有充分的理由对我的查询字符串进行了双重编码。

其他人可以确认我没有做出明显错误的事情,以及为什么会这样。一个防止它的解决方案,没有做一些讨厌的查询字符串解析,也会很棒!

例如,如果你点击了网址: 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 个答案:

答案 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

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

您必须事先使用URL执行某些操作,例如重定向或填充asp.net控件的NavigateUrl属性,并让asp.net呈现它,它可能会在它到达目标页面之前执行第一次解码。

答案 1 :(得分:0)

我认为这与您的浏览器有关。

查看Google's Browser Security Document,以下浏览器会在地址栏中翻译非保留的%nn序列:MSIE7,MSIE8,FF3,Opera,Chrome。

您在哪些浏览器中测试过此结果?