gpt4 book ai didi

asp.net-mvc - 尽管参数不同,为什么这两个操作被认为是不明确的?

转载 作者:行者123 更新时间:2023-12-02 09:19:47 25 4
gpt4 key购买 nike

当前对 Controller 类型“UsersController”上的操作“Index”的请求在以下操作方法之间不明确:Controllers.UsersController 类型上的 System.Web.Mvc.ActionResult PostUser(Models.SimpleUser)Controllers.UsersController 类型上的 System.Web.Mvc.ActionResult PostUser(Int32, Models.SimpleUser)

当我尝试使用表单值 POST website.com/users/时会发生这种情况。

当没有ID(website.com/users/)时,我希望它创建一个新用户,当有ID(例如/users/51)时,我希望它更新该用户,那么我该如何让它区分这两个操作之间的区别?

以下是两个操作:

    [HttpPost]
[ActionName("Index")]
public ActionResult PostUser(SimpleUser u)
{

return Content("User to be created...");
}

[HttpPost]
[ActionName("Index")]
public ActionResult PostUser(int id, SimpleUser u)
{

return Content("User to be updated...");
}

这是 map 路线:

    routes.MapRoute(
"Users",
"users/{id}",
new { controller = "Users", action = "Index" }
);

最佳答案

主要问题是两个操作方法之间存在一些歧义,因为模型绑定(bind)无助于确定路由配置。您当前的路由仅指向索引方法。

您仍然可以使用相同的 URL,但以不同的方式命名您的操作然后应用一些新的路由会很有帮助。

[HttpPost]
public ActionResult Create(SimpleUser u)
{
return Content("User to be created...");
}

[HttpPost]
public ActionResult Edit(int id, SimpleUser u)
{
return Content("User to be updated...");
}

然后在你的路由中尝试

routes.MapRoute(
"UserEdit",
"users/{id}",
new { controller = "Users", action = "Edit",
httpMethod = new HttpMethodConstraint("POST") });

routes.MapRoute(
"UserCreate",
"users",
new { controller = "Users", action = "Create",
httpMethod = new HttpMethodConstraint("POST") });

路由将仅限于 POST 事件,这意味着您仍然可以在同一路由上为 GET 方法添加一些路由。例如列表之类的。

关于asp.net-mvc - 尽管参数不同,为什么这两个操作被认为是不明确的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com