Max*_*oro 12 asp.net iis routing asp.net-routing
我问的原因是因为IIS保护某些ASP.NET文件夹,如Bin,App_Data,App_Code等.即使URL没有映射到实际的文件系统文件夹,IIS也会拒绝路径段等于其中一个的URL提到的名字.
这意味着我不能有这样的路线:
{controller}/{action}/{id}
Run Code Online (Sandbox Code Playgroud)
...其中id可以是任何字符串,例如
Catalog/Product/Bin
Run Code Online (Sandbox Code Playgroud)
因此,我没有禁用此安全措施,而是愿意在id之前使用后缀更改路由,如下所示:
{controller}/{action}_{id} // e.g. Catalog/Product_Bin
{controller}/{action}/_{id} // e.g. Catalog/Product/_Bin
Run Code Online (Sandbox Code Playgroud)
但是如果id包含新的分隔符,这些路由将不起作用,在这种情况下,例如
// These URL won't work (I get 404 response)
Catalog/Product_Bin_
Catalog/Product/_Bin_
Catalog/Product/__Bin
Run Code Online (Sandbox Code Playgroud)
为什么?我不知道,对我来说就像一个小虫.如何使这些路由工作,其中id可以是任何字符串?
好的,我有一个明确的答案.是的,这是一个错误.但是,在这一点上,我遗憾地说我们没有计划解决它,原因有两个:
您可以做的是将URL更改为不具有下划线:
{controller}/{action}/_{id}
Run Code Online (Sandbox Code Playgroud)
然后添加一个路由约束,该约束要求ID参数以下划线字符开头.
然后在您的操作方法中,您将从id参数中删除下划线前缀.如果您愿意,您甚至可以编写动作过滤器来为您执行此操作.抱歉给你带来不便.