这对我来说很简单,但我错过了船。
我有一个控制器,它处理两种不同类型的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方法。