0

我刚刚遇到了一些很奇怪的事情,但我还没有在其他有同样问题的人的互联网上找到任何提及。

如果我使用双重编码的 url 访问我的 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 进行解码)。

4

2 回答 2

4

放轻松,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 呈现它,这可能在它到达目标页面之前执行第一次解码。

于 2010-03-23T18:05:22.420 回答
0

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

查看Google 的浏览器安全文档,以下浏览器会翻译地址栏中的非保留 %nn 序列:MSIE7、MSIE8、FF3、Opera、Chrome。

你在哪些浏览器中测试过这个结果?

于 2010-03-23T18:07:08.010 回答