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

时间:2012-12-05 00:19:19

标签: asp.net-mvc-4 routes

我正在尝试完成以下操作并收到#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());
}

My Route Config具有默认路由设置,我尝试添加其他路由无效。

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

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

2 个答案:

答案 0 :(得分: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" }
);

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

答案 1 :(得分:2)

尝试在默认路线之前添加此路线

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

并注意该网址以客户而非客户开头。

,您想要的网址为:domain.com/Customers/1而不是domain.com/Customer/1