MVC 6 Web Api重复http动作(发布)

时间:2016-04-13 17:21:56

标签: asp.net-mvc

这对我来说似乎很简单但是我错过了这条船。

我有一个控制器可以处理两种不同类型的POST操作。

[HttpPost("")]
public JsonResult Post([FromBody]Category mdl)
{ ... snip... }


[HttpPost("")]
public JsonResult Post([FromBody]SubCategory mdl)
{ ... snip... }

唯一的区别是签名中的对象参数。最初我认为这足以让MVC能够区分,但失败了。当我有一个或另一个注释掉时,未注释的一个有效。 好的,然后我尝试了这个:

[HttpPost(Name = "UpdateCat")]
public JsonResult Post([FromBody]Category mdl)
{ ... snip... }


[HttpPost(Name = "UpdateSubCat")]
public JsonResult Post([FromBody]SubCategory mdl)
{ ... snip... }

但这也没有任何区别?所以我开始谷歌搜索并遇到了这个,但它并不是我所追求的,因为这些是同名的不同http动作。

Is it possible to have duplicate action names and parameter list for post and get?

我对处理不同的后期行动有什么误解?

1 个答案:

答案 0 :(得分:2)

如果要在同一个web api控制器中使用2个POST方法,可以使用Route属性为第二个POST方法定义特定的路由模式。

public class CategoryController: Controller
{
    [HttpPost]
    public HttpResponseMessage Post([FromBody]Category mdl)
    { 
       return Request.CreateResponse(HttpStatusCode.OK, mdl);
    }
    [HttpPost]
    [Route("~/api/products/SaveSubCat")]
    public HttpResponseMessage Post([FromBody]SubCategory  mdl)
    {
        return Request.CreateResponse(HttpStatusCode.OK, mdl);
    }
}

现在您的请求会有所不同

api/products/将触及第一个操作方法,api/producs/savesucat将触及第二个操作方法。

我建议你将第二个动作移到SubCategory控制器并使用它的默认POST方法。