12

我问的原因是因为 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 可以是任何字符串?

4

3 回答 3

7

好的,我有一个确定的答案。是的,这是一个错误。然而,在这一点上,我很遗憾地说我们没有计划修复它,原因有两个:

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

您可以做的是将 URL 更改为不包含下划线:

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

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

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

于 2011-09-19T19:17:35.220 回答
0

使用 ASP.NET MVC,如果您查看源代码,它们具有路径分隔符 (/) 的硬编码值,据我所知无法更改。

于 2011-04-21T00:32:22.363 回答
0

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

于 2011-04-20T23:13:57.900 回答