Asp.net mvc 4 具有Id和索引操作的MVC4路由
我正在尝试完成以下操作,并收到#2的“未找到资源”错误。假设是因为路由配置不正确 所需URL: 1) domain.com/Customer 2) domain.com/Customer/1*不起作用 3) domain.com/Customer/AllAsp.net mvc 4 具有Id和索引操作的MVC4路由,asp.net-mvc-4,routes,Asp.net Mvc 4,Routes,我正在尝试完成以下操作,并收到#2的“未找到资源”错误。假设是因为路由配置不正确 所需URL: 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; /
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
,这很有效。我曾尝试过这样的路线,但运气不好……但诀窍是将它们不仅移动到默认客户路线之上,而且移动到所有其他路线之上。这也很有效……但我更喜欢@Rob的方法。谢谢你!