2016-04-29 5 views
2

я могу сделать это с помощью этого кода:ASP.NET 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» с теми же параметрами «

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

так:

проводок (SampleModel1) => "Controller1 \ SampleRoute1" => Выполнение FUNCTION1

проводок (SampleModel1) => "Controller1 \ SampleRoute2" => Выполнение Function2

ответ

7

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

Обратите внимание, что имя действия & Тип запроса на отправку уже указан в атрибуте HttpPost, поэтому вам не нужно полагаться на имя метода.

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

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

Вы получаете сообщение об ошибке, поскольку у вас есть 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.