我有一个相当简单的设置,我正在创建一个MVC网站来显示客户的详细信息。对于客户,唯一ID是他们的电子邮件地址,这是非数字的。所以在我的ROuteConfig.cs中我有默认路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
在我的名为“CustomerController”的控制器中,我有这个动作
public ActionResult Details(string id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
CustomerModel customerModel = _customerManager.GetCustomer(id);
if (customerModel == null)
{
return HttpNotFound();
}
return View(customerModel);
}
现在我导航到这个网址
http://localhost:45826/customer/Details/someemail%40web.com
路由基础设施不会在我的控制器上调用操作“详细信息”,但是如果我导航到此网址
http://localhost:45826/customer/Details/5
然后该动作调用传入id参数的值5。
如果我稍微更改了URL并使用此语法
http://localhost:45826/customer/Details?id=fromweb%40web.com
再次正确调用该操作,将电子邮件地址传递给id参数。
有人可以帮助理解为什么非数字值没有按预期映射到操作吗?
我也尝试在默认路由之前添加此路由,但这也不起作用,我得到相同的结果
routes.MapRoute(
name: "ViewCustomer",
url: "customer/details/id",
defaults: new { controller = "Customer", action = "Details", id = "" }
);
答案 0 :(得分:0)