ASP.NET Core MVC 1.0 多个 post 方法在一个控制器中

ASP.NET Core MVC 1.0 multiple post method in one Controller

我可以使用这段代码来做到这一点:

    [HttpPost("SampleRoute1")]
    public JsonResult Post([FromBody]SampleModel1 value)
    {
        .....Functionone.....
        return Json("");
    }

    [HttpPost("SampleRoute2")]
    public JsonResult Post([FromBody]SampleModel2 value)
    {
        .....Functiontwo.....
        return Json("");
    }

但我做不到:

    [HttpPost("SampleRoute1")]
    public JsonResult Post([FromBody]SampleModel1 value)
    {
        .....Functionone.....
        return Json("");
    }

    [HttpPost("SampleRoute2")]
    public JsonResult Post([FromBody]SampleModel1 value)
    {
        .....Functiontwo.....
        return Json("");
    }

它给出错误“Type 'Controller1' 已经用相同的参数类型定义了一个名为 'Post' 的成员”

那么有什么方法可以让我在一个控制器中使用相同的参数但使用不同的路线制作两个 Post 吗?

像这样:

Posting(SampleModel1) => "Controller1\SampleRoute1" => 执行函数 1

Posting(SampleModel1) => "Controller1\SampleRoute2" => 执行函数 2

是的,你可以做到。问题是您试图在 class 中使用两个具有相同名称和参数的方法,但这是不可能的。您应该将方法的名称更改为不同的名称。

请注意,操作名称和 Post 请求类型已在 HttpPost 属性中指定,因此您不必依赖方法名称。

[HttpPost("SampleRoute1")]
public JsonResult Aaa([FromBody]SampleModel1 value)
{
    .....Functionone.....
    return Json("");
}

[HttpPost("SampleRoute2")]
public JsonResult Bbb([FromBody]SampleModel1 value)
{
    .....Functiontwo.....
    return Json("");
}

您收到错误是因为您有 2 个相同的方法。你怎么知道要执行哪一个?您是基于您定义的路线吗?

如果我给你2个一模一样的红苹果吃,这2个苹果没有区别,我告诉你吃正确的苹果,你知道哪个是正确的苹果吗?

您将不得不更改您的方法名称,以便它们是唯一的和可识别的。

[HttpPost("SampleRoute1")]
public ActionResult Function1(SampleModel1 model)
{
     return Json("");
}

[HttpPost("SampleRoute2")]
public ActionResult Function2(SampleModel1 model)
{
     return Json("");
}

所以根据以上,会发生以下情况:

  • 所以现在当发布 SampleModel1 时,使用路由 Controller1\SampleRoute1 将执行操作方法 Function1
  • 所以现在当发布 SampleModel2 时,使用路由 Controller1\SampleRoute2 将执行操作方法 Function2.