我有一个包含&符号的查询字符串参数值。例如,参数的有效值可能是:
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本身。我已经更改了标题以反映这一点,但我会将问题的其余部分保留为原样,直到我发现有关此问题的更多内容。
答案 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?
有趣的阅读:
答案 2 :(得分:0)
切换到UrlRewritingNet.UrlRewrite做了而非帮助,因为它显然有相同的错误。我认为它毕竟可能与ASP.NET有关。
答案 3 :(得分:0)
我认为URLRewriter在无名参数(null name)方面存在问题 我遇到了类似的问题。当我给无名参数一个(虚拟)名称时,一切都按预期工作。