3

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

a & b

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

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

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

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

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


更新:问题取决于URLRewriter(第三方插件)而不是 ASP.NET 本身。我已更改标题以反映这一点,但我将保留问题文本的其余部分,直到我找到有关该问题的更多信息。

4

4 回答 4

1

伙计,我和你在同一条船上,我花了好几个小时试图找出问题所在,正如你所说,这两者都是一个错误,因为普通链接包含奇怪的字符或 UTF-8 代码asp.net 可以很好地解析字符。

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

更新:你不会相信的,我发现问题很奇怪,它与 IIS 有关,尝试从 Visual Studio 开发服务器启动您的页面,Unicode 字符将被解析得很好,但是如果您从 IIS 启动页面7 它会给你的???? 人物。

希望一些身体会在这里遮住一些光

于 2009-03-15T07:00:37.573 回答
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

于 2009-03-18T05:48:16.623 回答
0

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

于 2009-02-09T22:55:31.483 回答
0

我认为 URLRewriter 有无名参数(空名称)的问题。
我有一个类似的问题。当我给我的无名参数一个(虚拟)名称时,一切都按预期工作。

于 2010-08-17T13:13:13.703 回答