在Web API 2操作中接收JSON格式的数据?

时间:2014-06-11 05:52:54

标签: c# asp.net json asp.net-web-api2

我正在使用JSON进行输入和输出的RESTful API - 进入的请求应该包含包含相关数据的JSON格式化主体,并且响应将类似地进行JSON格式化。

我遇到的问题是,我不能为我的生活找出如何从POST请求中收集信息并将其正确映射到相关对象。

例如,我想允许对“/ contacts”的POST请求,该请求将包含类似于此的JSON格式的Contact对象:

{"Given":"John", "Surname":"Doe"}

问题是,无论我尝试什么,我都无法通过接收操作来识别这些信息。如何在我的操作中访问请求正文中提交的JSON对象?

[RoutePrefix("contacts")]
public class ContactsController : BaseController
{
    [Route("")]
    [ResponseType(typeof(ApiResponse))]
    public IHttpActionResult PostContacts(FormDataCollection data)
    {
        ApiResponse response = new ApiResponse();

        response.Data = data;

        return Ok(response);
    }
}

响应总是包含“response.Data”的空值,当我调试应用程序时,我可以看到“数据”实际上是空的。

修改

我忘了提及我喜欢这个如何工作。理想情况下,我希望我的行为有类似于此的签名:

public IHttpActionResult PostContacts(Contact contact) {}

根据传入请求正文中包含的JSON自动填充联系人变量。

2 个答案:

答案 0 :(得分:3)

如果您的Contact类具有与JSON对象相同的属性名称,

   publc class Contact {
        public string Given { get; set; }
        public string Surname{ get; set; } 
    }

然后Web API将为您绑定对象

    public IHttpActionResult PostContacts(Contact data)
    {
        ApiResponse response = new ApiResponse();
        response.Data = data;    
        return Ok(response);
    }

如果它不起作用,您可能需要显示您的数据发布方式。

答案 1 :(得分:2)

尝试从身体加载对象,如下所示:

public IHttpActionResult PostContacts([FromBody]Contact contact) {}

如果json对象上的属性被正确命名,则应自动填充Contact对象。这样你根本不必使用FormDataCollection。