如何在ASP.NET MVC 5中设置{controller}/{id}
路由。
我希望实现的目标:如果未定义{action}
,请使用Index()
致电id
。
我试过这个但是没有用:
// Keep default routing
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
// Add own routing in case of missing "action"
routes.MapRoute(
name: "Controller/Id",
url: "{controller}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
答案 0 :(得分:0)
在阅读了ameer的评论后,很明显路由不是我所希望的“智能”,所以如果URL模式匹配一条路线,但没有找到这样的控制器/方法,它就不会“掉头”到下一个路由命令,但会引发异常。
所以我尝试了Simon建议的内容,为我的自定义路由添加了约束,并颠倒了顺序,现在它正常工作。但是,如果我想要其他类似于附件的映射,我必须逐个添加它们。
工作代码:
routes.MapRoute(
name: "Attachments",
url: "attachments/{id}",
defaults: new { controller = "Attachments", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);