如何删除MVC URL路由中的“详细信息”,但保留其他操作?
-
05-07-2019 - |
题
我想为具有正常CRUD操作的控制器设置路由,但希望详细信息操作不在URL中显示“详细信息”。 Stackoverflow似乎配置了这种类型的路由:
http://stackoverflow.com/questions/999999/
http://stackoverflow.com/questions/ask
使用这个类比,我的路线目前看起来像:
http://stackoverflow.com/questions/Details/999999/
通过添加以下路线,我可以删除 Details
:
routes.MapRoute("Q1", "questions/{id}",
new { controller = "Questions", action = "Details" });
然而,在控制器上启动其他操作(例如,此示例中的 / questions / new
)抱怨无法解析id。
是否有办法设置路线,以便我不必手动将所有其他操作(MapRoute" items / create"," items / delete"等)手动输入Global。 asax.cs?我基本上想要第二条路线,如:
routes.MapRoute("Q2", "questions/{action}",
new { controller = "Questions", action = "Index" });
...如果 {id}
匹配整数,则路由引擎使用路由Q1,如果是字符串,则使用 {action}
。这可能吗?
解决方案
如果你在第一个上设置一个路由约束,这样id字段只能是一个整数,那么我相信任何其他的操作都会落到默认值。
routes.MapRoute("Q1",
"questions/{id}",
new {controller = "Questions", action = "Details"},
new { id=@"\d+" });
其他任何东西都应该由默认路由处理。所以“问题/ 3553”会打这个,但“问题/问题”不匹配。您可能希望将更具体的路由放在Global.asax.cs文件中。
不隶属于 StackOverflow