如果url({controller} / {id})中缺少“action”,请添加路由

时间:2013-09-01 21:19:50

标签: c# asp.net asp.net-mvc url-routing asp.net-mvc-5

如何在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 }
);

1 个答案:

答案 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 }
);