为默认值“”传递一个非数字值;id”;MVC控制器中的参数
本文关键字:id 数字 MVC 控制器 参数 一个 默认值 | 更新日期: 2023-09-27 18:27:47
我有一个相当简单的设置,我正在创建一个MVC网站来显示客户的详细信息。对于客户来说,唯一的id是他们的非数字电子邮件地址。所以在我的ROuteConfig.cs中,我有默认的路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
在我的控制器"客户控制器"中,我有这个动作
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);
}
现在,当我导航到此url 时
http://localhost:45826/customer/Details/someemail%40web.com
路由基础结构不会在我的控制器上调用操作"详细信息",但是如果我导航到这个url
http://localhost:45826/customer/Details/5
则该操作是invoke,传入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 = "" }
);
将其添加到web.config中:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
阅读:https://stackoverflow.com/a/49831093/10299573