2

我在 Web 表单上下文中使用自定义路由。我有一些标题(我的自定义路线的一部分)有问号字符。当我对该文本进行 URL 编码(“问题?”)然后传递到我的路由时,我得到一个 HTTP 错误代码 400。显然,URL 编码的文本以某种方式混淆了路由管理器。

有人可以为此提供上下文和解释吗?除此之外,我认为我不需要对这些路由数据进行 URL 编码,而只是去除问题字符。不使用 URL 解码/编码是否有任何安全风险?什么是问题人物?一份清单会很有用。

谢谢!

更新:自定义路由的查询字符串中似乎不允许使用 % 字符。期待关于这个问题的一些好的意见!

4

1 回答 1

1

以下是 MS 关于UrlEncode() “URL 编码确保所有浏览器都能正确传输 URL 字符串中的文本”的说法。问号 (?)、与号 (&)、斜线 (/) 和空格等字符可能会被某些浏览器截断或损坏。因此,这些字符必须在标签或查询字符串中编码,其中字符串可以由浏览器在请求字符串中重新发送。

此外,您应该只对查询参数进行编码,否则结果会导致问题。例如,如果您有此链接

http://www.contoso.com/articles.aspx?title=ASP.NET+Examples

你编码整个,你会得到

http%3a%2f%2fwww.contoso.com%2farticles.aspx%3ftitle%3dASP.NET%2bExamples

有关更多详细信息,请参阅http://msdn.microsoft.com/en-us/library/zttxte6w.aspx

我使用 4.0 版本附带的 ASP.net 路由。这是示例代码http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4- 0 系列.aspx。您可以很容易地操作您的链接。

更新:Microsoft 对 IIS7 进行了一些更改,可能会导致路由出现问题。因此,尝试将应用程序池的“托管管道模式”设置从集成更改为经典。

于 2010-06-01T07:47:38.350 回答