2016-04-29 78 views
2

我可以通過使用此代碼做到這一點:ASP.NET MVC核心1.0多POST方法在一個控制器

[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'的成員具有相同的參數類型

所以有什麼辦法可以讓兩個Post在一個控制器中使用相同的參數呃但有不同的路線?

這樣的:

過帳(SampleModel1)=> 「控制器1 \ SampleRoute1」=>否則功能1

過帳(SampleModel1)=> 「控制器1 \ SampleRoute2」=>否則功能2

回答

7

是,你可以做到這一點。問題是,你想擁有的在具有相同名稱&參數類兩種方法,這就是不可能的。你應該改變你的方法的名稱不同。

請注意,操作名稱& Post請求類型已在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個相同的紅蘋果吃,有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
相關問題