【问题标题】:Url encode and routing?网址编码和路由?
【发布时间】:2010-06-01 03:24:56
【问题描述】:

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

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

谢谢!

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

【问题讨论】:

  • 我可能会误解,但是,为了绝对安全,你可以在发送端进行base64编码,在接收端进行base64解码吗?
  • @Barry 这将破坏拥有纯文本用户友好路径的目的。

标签: asp.net routing urlencode urldecode


【解决方案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 进行了一些更改,可能会导致路由出现问题。所以尝试将应用程序池的“托管管道模式”设置从集成更改为经典。

【讨论】:

  • 我没有对整个路由进行编码,只有查询和我的观点是对查询参数使用 URL 编码不适用于 &、% 和其他一些未知符号。有趣的是,当我在 webdev 上为 & 编码时,它可以工作,但不能在 IIS 7 上工作,但有些工作可以在 webdev 而不是 IIS 7 上工作。我认为这是个问号。我通过从参数中删除这些字符暂时解决了这个问题。
  • 您使用的是什么应用程序池设置?
猜你喜欢
  • 2019-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-11
  • 2010-10-29
  • 2011-11-24
  • 1970-01-01
相关资源
最近更新 更多