我要问的原因是因为IIS保护某些ASP.NET文件夹,例如bin,app_data,app_code等提到的名称。

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

{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可以是任何字符串?

有帮助吗?

解决方案

好的,我有一个确定的答案。是的,这是一个错误。但是,在这一点上,我很遗憾地说,我们没有计划以几个原因进行修复:

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

您可以做的是将URL更改为没有强调:

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

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

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top