MVC 6 Web Api重复http操作(Post)



这对我来说很简单,但我错过了船。

我有一个控制器,它处理两种不同类型的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操作。

post和get是否可能有重复的动作名称和参数列表?

我对处理不同的岗位行动有什么误解?

如果您想在同一个web api控制器中有两个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方法。

最新更新