Request.Querystring自动url解码字符串?

mer*_*erk 23 c# asp.net url url-rewriting c#-4.0

我正在使用一个页面,我有一个网址:
/ directory/company/manufacturer

使用一些重写规则,这将被重写

使用/ directory/company/dunkin%26donuts /进行测试

一些制造商的名字中有一个&符号.所以我想我可以用更换&符号%26.但是,当我调试代码并将鼠标悬停在Request.QueryString它上面时,显示我{qq=company&manf=dunkin&donuts&cond=}Request.QueryString["manf"]给我'dunkin'

如果我用%24($)而不是&符号,徘徊过来Request.QueryString给我 {qs=company&manf=dunkin%24donuts&cond=}Request.QueryString["manf"]给我'dunkin $ donuts'

我不明白这里的不同行为.为什么在您实际请求特定密钥之前,似乎对&符号的url编码值进行了解码,但是另一个url编码的字符(如美元符号)只有在您实际请求该特定密钥后才会被解码?

这是最近的变化吗?我一直以为Request.QueryString[key]没有首先解码就返回实际文本.或者它与网址重写有什么关系?

mat*_*mmo 36

UrlDecode()当您通过键索引(即(Request.QueryString["key"]))访问属性时,ASP.NET会自动调用.

如果你想要它编码,只需:

HttpUtility.UrlEncode(Request.QueryString["key"]);

特别是在&符号方面,这是一个特殊情况字符,因为它已经被用作查询字符串分隔符.URL编码和解码&符号应该总是给你&这个原因.


Str*_*ior 9

更换&符%26应该导致该值被转义,因此Request.QueryString["manf"]会产生dunkin&donuts.

这个类似问题的提问者最终意识到同一页面上的其他一些代码最终预先解码了他的&符号.你有可能发生类似的事吗?也许有些javascript %26在将它发送到您的服务器之前将其解码为&符号.尝试使用Firebug或Chrome的开发人员工具查看从浏览器发送的实际URL字符串.

更新

在再次查看问题后,我意识到您可能正在使用URL重写器.这篇文章描述了一个类似的问题,我不确定解决方案,但您可能想尝试使用%2526而不是使用&符号进行双重编码%26.