具有Id和索引动作的MVC4路由

roa*_*own 2 routes asp.net-mvc-4

我正在尝试完成以下操作并收到#2的"资源未找到"错误.假设因为未正确配置路由.

所需的网址:

1)domain.com/Customer

2)domain.com/Customer/1 *不起作用

3)domain.com/Customer/All

public ActionResult Index(int? id)
{
    var viewModel = new CustomerViewModel();

    if (!id.HasValue)
        id = 1; // ToDo: Current Logged In Customer Id

    viewModel.Load(id.Value);

    return View(viewModel);
}
public ActionResult All()
{
    return View(CustomerModel.All());
}
Run Code Online (Sandbox Code Playgroud)

我的路由配置有默认的路由设置,我尝试添加一个额外的路由无济于事.

routes.MapRoute(
    name: "Customer",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Customer", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)

我已经排除了我设置新路线的尝试,因为它不起作用.

Rob*_*Rob 5

您的路线将标准化为domain.com/Customer/Index/1.当您拥有路径的后续部分时,您不能仅仅因为其值将是默认值而消除之前的组件.在这种情况下,它正在寻找一个无法找到的名为"1" 的动作.

编辑:

如果您所需的路线是domain.com/Customer/ID,那么您可以将这样的路线添加到路线表:

routes.MapRoute(
    name: "CustomerAll",
    url: "Customer/All",
    defaults: new { controller = "Customer", action = "All" }
);
routes.MapRoute(
    name: "CustomerByID",
    url: "Customer/{id}",
    defaults: new { controller = "Customer", action = "Index" }
);
Run Code Online (Sandbox Code Playgroud)

这些更具体的路线应该在您的默认路线之前.