2010-06-01 108 views
2

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

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

谢谢!

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

+0

我可能会误解,但为了绝对安全,您可以在发送端base64编码,在接收端可以base64解码? – barrycarter 2010-06-01 04:51:18

+0

@巴里,将打败具有纯文本用户友好路径的目的。 – 2010-06-02 15:41:53

回答

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

我用ASP.net路由自带与版本4.0。这里是示例代码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进行了一些更改,这可能会导致路由问题。因此,请尝试将应用程序池的设置“管理流水线模式”从“集成”更改为“经典”。

+0

我没有编码整个路由,只有查询和我的观点使用查询参数上的URL编码对于&,%和其他一些未知符号无效。有趣的是,当我在&webdev上编码时,它工作但不在IIS 7上,但是有一些工作在webdev而不是IIS 7上。我认为这是问号。我暂时通过从我的参数中删除这些字符来解决这个问题。 – 2010-06-02 15:40:12

+0

您使用的是什么App池设置? – Thea 2010-06-02 16:19:19