MVC:添加自定义路由后,默认路由被忽略?

时间:2014-03-18 10:00:21

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing asp.net-mvc-5

在我的routeConfig中,我在默认路由的顶部添加了一个自定义路由

routes.MapRoute(
    name: "appointmentandattendee",
    url: "{controller}/{action}/{appointmentId}/{attendeeId}",
    defaults: new { controller = "Response", action = "Index", appointmentId = UrlParameter.Optional, attendeeId = UrlParameter.Optional }
);

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

所以,对于这个动作

public ActionResult Index(Guid appointmentId, Guid attendeeId)
{
   return Content("Hello");
}

路由看起来像

http://localhost/Response/Index/96de7851-49f6-4b69-8a58-2bea39bd466e/7d4fe8ed-7dae-e311-be8f-001c42aef0b2

但现在忽略名称默认的路由

例如: 在我的Appointment控制器中有一些动作和参数作为id我期望使用默认路由,但事实并非如此 因此,对于AppointmentController

中的此操作
public ActionResult Test(Guid id)
{          
    return Content("Hello");
}

路由看起来像

localhost:/Appointment/Test?id=96de7851-49f6-4b69-8a58-2bea39bd466e

为什么? 在这种情况下,它不应该使用默认路由吗?

1 个答案:

答案 0 :(得分:2)

因为您的路线appointmentandattendee会覆盖您的默认路线。

试试这个:

routes.MapRoute(
    name: "appointmentandattendee",
    url: "Response/{action}/{appointmentId}/{attendeeId}",
    defaults: new { controller = "Response", action = "Index", appointmentId = UrlParameter.Optional, attendeeId = UrlParameter.Optional }
);

我将第一部分的网址指定为Response,默认控制器仍为controller = "Response"。现在你的路线不像以前那样普遍。