2016-04-29 87 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
相关问题