我问的原因是因为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可以是任何字符串?
答案 0 :(得分:7)
好的,我有一个明确的答案。是的,这是一个错误。但是,在这一点上,我遗憾地说我们没有计划解决它,原因有两个:
您可以做的是将网址更改为不具有下划线:
{controller}/{action}/_{id}
然后添加一个路由约束,要求ID参数以下划线字符开头。
然后在您的操作方法中,您将从id参数中删除下划线前缀。如果您愿意,您甚至可以编写动作过滤器来为您执行此操作。很抱歉给您带来不便。
答案 1 :(得分:0)
您可以使用目录或文件名不允许的字符,例如:*,?,:,“,<,>,|。
答案 2 :(得分:0)
使用ASP.NET MVC,如果查看源代码,它们会为路径分隔符(/)提供硬编码值,而且据我所知,无法更改。