我正在尝试完成以下操作并收到#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 }
);
我已经排除了设置新路线的尝试,因为它不起作用。
答案 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