带参数的asp.net mvc路由

时间:2015-07-24 11:30:13

标签: c# asp.net-mvc routes

我想获得以下链接:

  • /(映射到AccountController / Index
  • / account / login(映射到AccountController / Login
  • / 2112 /电子邮件(映射到EmailsController / Index操作,2112将是路由参数)
  • / 2112 /电子邮件/列表(映射到EmailsController / List操作,212将是路由参数)

我无法让路线发挥作用,因为它们之间似乎相互冲突。以下内容让我始终拥有路线参数,这不是我需要的。如果不提供数据库参数,它就不会绑定。

routes.MapRoute(
    name: "Default",
    url: "{database}/{controller}/{action}",
    defaults: new { database = UrlParameter.Optional, controller = "Account", action = "Index" }
);

1 个答案:

答案 0 :(得分:1)

订单在您的路线配置中很重要。在MVC中路由的关键是从最具体的路由开始并进行处理。此外,由于您具有电子邮件控制器的特定路由规则,因此您可以在URL参数中专门指定控制器的名称。所以在这里你会这样做:

routes.MapRoute(
    name: "Emails",
    url: "{id}/Emails/{action}",
    defaults: new { controller = "Emails", action = "Index" },
    constraints: new { id = @"\d+" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}",
    defaults: new { controller = "Account", action = "Index" }
);