URLRewriter查询字符串中的&符号

时间:2009-02-09 20:45:24

标签: asp.net query-string url-encoding urlrewriter

我有一个包含&符号的查询字符串参数值。例如,参数的有效值可能是:

a & b

当我生成包含参数的URL时,我正在使用System.Web.HTTPUtility.UrlEncode()来使每个元素都是URL友好的。它(正确地)给了我一个URL:

http://example.com/foo?bar=a+%26b

问题是ASP.NET的Request对象将(编码的)&符号解释为Query String参数分隔符,因此将我的值拆分为2部分(第一部分为“bar”作为参数名称;第二部分为一个空名称。)

ASP.NET似乎首先对URL进行URL解码,然后在解析查询字符串时使用它。

解决这个问题的最佳方法是什么?


更新:问题取决于URLRewriter(第三方插件),而不是ASP.NET本身。我已经更改了标题以反映这一点,但我会将问题的其余部分保留为原样,直到我发现有关此问题的更多内容。

4 个答案:

答案 0 :(得分:1)

人, 我在同一条船上和你在一起,我花了几个小时试图弄清问题是什么,正如你所说的那样两者都是一个错误,因为包含奇怪字符或UTF-8代码字符的普通链接是asp.net解析得很好。

我认为我们必须切换到MVC.routing

更新:男人,你不会相信它,我发现它是如此奇怪的问题,它与IIS, 尝试从visual studio Dev服务器启动你的页面并且Unicode字符将被解析得很好,但是如果你从IIS 7启动页面它会给你????字符。

希望有些身体会遮挡一些光线

答案 1 :(得分:1)

我会想到%26和'&'对Web服务器来说意味着完全相同的东西,所以它的预期行为。 Urlencode用于编码URL,而不是编码查询字符串。

...坚持...... 尝试在谷歌搜索abc& def,你会得到:

http://www.google.com.au/search?q=abc%26def

因此您的查询字符串 正确,%26是文字&符号。嗯,你是对的,听起来像个臭虫。你如何与一个&而不是%26?

有趣的阅读:

http://www.stylusstudio.com/xsllist/200104/post11060.html

答案 2 :(得分:0)

切换到UrlRewritingNet.UrlRewrite做了而非帮助,因为它显然有相同的错误。我认为它毕竟可能与ASP.NET有关。

答案 3 :(得分:0)

我认为URLRewriter在无名参数(null name)方面存在问题 我遇到了类似的问题。当我给无名参数一个(虚拟)名称时,一切都按预期工作。