WebApi模型绑定带有2个不同的对象

时间:2016-04-28 11:10:36

标签: asp.net web asp.net-web-api asp.net-web-api2 model-binding

我需要创建一个终点,但是这个终点可以有多种类型的输入,表单本身可以根据配置进行更改,所以我试图创建至少2个对象作为可能的输入。

类似的东西:

public class ParticipationsController : ApiController
{

 public HttpResponseMessage Post([FromBody]Models.SimpleParticipationModel sModel, [FromBody]Models.CompleteParticipationModel cModel)
    {
        if (!ModelState.IsValid) // this might not be this way here 
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest);
        }

        return Request.CreateResponse(HttpStatusCode.OK, "Ok");
    }

我的观点是避免使用多个端点并在页面中更改大量渲染。

我的对象包含DataAnotations以遵守某些规则,例如“Required”和“Range 0-X”。

我也没有拥有所有属性的对象,只能完成其中的一些。

提前致谢

1 个答案:

答案 0 :(得分:1)

这可能是不可能的。为每个对象创建两个端点或创建包含上述两个对象的对象。

例如,在这里,您可以在API操作中传递ViewModel的对象,该操作基本上包括两个对象。这还将维护对象属性的数据注释行为。

public class ViewModel
{ 
     SimpleParticipationModel  sModel {get;set;}
     CompleteParticipationModel  cModel {get;set;}
}

public class ParticipationsController : ApiController
{

 public HttpResponseMessage Post([FromBody]ViewModel)
 {
    if (!ModelState.IsValid) // this might not be this way here 
    {
        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }

    return Request.CreateResponse(HttpStatusCode.OK, "Ok");
}