使用MVC Web API发布对象数组

bri*_*010 26 c# deserialization asp.net-web-api

我有一个基本的post操作,适用于单个对象RecordIem.我想做的是做同样的操作,但是通过使用相同的格式发布一系列请求来批量操作.

例如:

public HttpResponseMessage Post(RecordItem request)
{
    var recordItems = _recorder.RecordItem(request);
    return Request.CreateResponse(HttpStatusCode.OK, recordItems);
}
Run Code Online (Sandbox Code Playgroud)

当我发布Json时:

{
    Id : "7UP24fVkGOxSjrcclghe_mP2-po",
    System : 1,
    Environment : "Production"
}
Run Code Online (Sandbox Code Playgroud)

一切正常.我想发布Json类似于:

{
    Id : "7UP24fVkGOxSjrcclghe_mP2-po",
    System : 1,
    Environment : "Production"
},
{
    Id : "ClPE188H4TeD2LbQPeV_EzCsKVM",
    System : 1,
    Environment : "Production",
    Label : "RestTest1"
},
{
    Id : "SAWTMJzm-_AFqoNw70-gLeUzB4k",
    System : 1,
    Environment : "Production"
}
Run Code Online (Sandbox Code Playgroud)

并有一个类似于下面的方法选择这个:

public HttpResponseMessage Post(RecordItem[] request)
{
    var recordItems = _recorder.RecordItems(request);
    return Request.CreateResponse(HttpStatusCode.OK, recordItems);
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用数组上的[FromBody][ModelBinding]属性并尝试使用不同的类型(List,IList,IEnumerable),但无济于事.当使用[FromBody]请求参数null时,使用[ModelBinding]列表为空.我尝试过使用这两种方法,但也无效.

我宁愿不必在我的客户端中使用循环单个帖子.

谢谢

Oli*_*ter 23

对于所有只要他们尝试的空数组,尝试这个:

var request = $.ajax({
  dataType: "json",
  url: "/api/users",
  method: "POST",
  data: { '': postData}
});
Run Code Online (Sandbox Code Playgroud)

数据必须是单个匿名对象而不是原始数组.

信息在这里找到.


Mag*_*ing 20

由于您的Post期望RecordItem[],您的请求正文中的JSON内容也应该在数组中.

您拥有的非常接近 - 尝试[]在数据周围添加一对方括号:

[{
    Id : "7UP24fVkGOxSjrcclghe_mP2-po",
    System : 1,
    Environment : "Production"
},
{
    Id : "ClPE188H4TeD2LbQPeV_EzCsKVM",
    System : 1,
    Environment : "Production",
    Label : "RestTest1"
},
{
    Id : "SAWTMJzm-_AFqoNw70-gLeUzB4k",
    System : 1,
    Environment : "Production"
}]
Run Code Online (Sandbox Code Playgroud)

  • 这个数字仍然是0,不确定如何/为什么对他有用,但是看起来这是两年多以前的事了... (2认同)