我需要使用以下网址实现一个MVC网站:
其中匹配条件是url以"wiki"结尾.
不幸的是,下面的catch-all仅适用于url的最后部分:
routes.MapRoute("page1", // Route name
"{*path}/wiki", // URL with parameters
new { controller = "Wiki", action = "page", version = "" } // Parameter defaults
Run Code Online (Sandbox Code Playgroud)
我没有时间通过MVC扩展性选项,所以我想知道实现这个的可能选择是什么?任何样本/示例都会非常棒!
我问的原因是因为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可以是任何字符串?