我正在使用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自动填充联系人变量。
答案 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。