具有 ID 和索引操作的 MVC4 路由



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

我的路由配置具有默认路由设置,我尝试添加其他路由但无济于事。

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

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

您的路由将规范化为 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" }
);

这些更具体的路由应位于默认路由之前。

尝试在

默认路由之前添加此路由

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

请注意,URL 以"客户"开头,而不是"客户"。

您想要的URL将是:domain.com/Customers/1而不是domain.com/Customer/1

最新更新