ASP.NET路由:令牌之间的文字子段,以及带有来自文字子段的字符的路由值

时间:2010-11-30 20:41:37

标签: asp.net iis routing asp.net-routing

我问的原因是因为IIS保护某些ASP.NET文件夹,如Bin,App_Data,App_Code等。即使URL未映射到实际的文件系统文件夹,IIS也会拒绝路径段等于的URL其中一个提到的名字。

这意味着我不能有这样的路线:

{controller}/{action}/{id}

...其中id可以是任何字符串,例如

Catalog/Product/Bin

因此,我没有禁用此安全措施,而是愿意使用id之前的后缀更改路由,如下所示:

{controller}/{action}_{id} // e.g. Catalog/Product_Bin
{controller}/{action}/_{id} // e.g. Catalog/Product/_Bin

但是如果id包含新的分隔符,这些路由将不起作用,在这种情况下为_,例如

// These URL won't work (I get 404 response)
Catalog/Product_Bin_
Catalog/Product/_Bin_
Catalog/Product/__Bin

为什么呢?我不知道,对我来说就像一个小虫。如何使这些路由工作,其中id可以是任何字符串?

3 个答案:

答案 0 :(得分:7)

好的,我有一个明确的答案。是的,这是一个错误。但是,在这一点上,我遗憾地说我们没有计划解决它,原因有两个:

  • 这是一个突破性的变化,可能很难注意到。
  • 有一个简单的解决方法。

您可以做的是将网址更改为不具有下划线:

{controller}/{action}/_{id}

然后添加一个路由约束,要求ID参数以下划线字符开头。

然后在您的操作方法中,您将从id参数中删除下划线前缀。如果您愿意,您甚至可以编写动作过滤器来为您执行此操作。很抱歉给您带来不便。

答案 1 :(得分:0)

您可以使用目录或文件名不允许的字符,例如:*,?,:,“,<,>,|。

答案 2 :(得分:0)

使用ASP.NET MVC,如果查看源代码,它们会为路径分隔符(/)提供硬编码值,而且据我所知,无法更改。