网址编码和路由?

时间:2010-06-01 03:24:57

标签: asp.net routing urlencode urldecode

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

有人可以为此提供背景和解释吗?除此之外,我认为我不需要对这些路由数据进行URL编码,而只是删除问题字符。不使用URL解码/编码是否存在安全风险?问题是什么角色?列表很有用。

谢谢!

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

1 个答案:

答案 0 :(得分: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-series.aspx。您可以轻松操作链接。

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