ASP.NET Core MVC 1.0 метод множественного столба в одном контроллере


Я могу сделать это, используя следующий код:

    [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("");
    }

Это дает ошибку "тип 'Controller1' уже определяет член под названием 'Post' с теми же типами параметров "

Так есть ли способ, которым я могу сделать два поста в одном контроллере с одним и тем же параметром, но с разным маршрутом?

Вот так:

Posting(SampleModel1) = > "Controller1SampleRoute1" = > Doing Function1

Posting (SampleModel1) => "Controller1SampleRoute2" = > Выполнение Функции Function2

2 2

2 ответа:

Да, вы можете сделать это. Проблема в том, что вы пытаетесь иметь два метода в классе, которые имеют одинаковое имя и параметры, и это невозможно. Вы должны изменить название ваших методов на что-то другое.

Обратите внимание, что имя действия и тип запроса 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.