我有一个基本的post操作,适用于RecordIem
的单个对象。
我想做的是做同样的动作,但是通过使用相同的格式发布一系列请求来批量处理。
例如:
public HttpResponseMessage Post(RecordItem request)
{
var recordItems = _recorder.RecordItem(request);
return Request.CreateResponse(HttpStatusCode.OK, recordItems);
}
当我发布Json时:
{
Id : "7UP24fVkGOxSjrcclghe_mP2-po",
System : 1,
Environment : "Production"
}
一切正常。我想发布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"
}
有一个类似下面的方法选择这个:
public HttpResponseMessage Post(RecordItem[] request)
{
var recordItems = _recorder.RecordItems(request);
return Request.CreateResponse(HttpStatusCode.OK, recordItems);
}
我尝试过使用数组上的[FromBody]
和[ModelBinding]
属性,并尝试使用不同的类型(List,IList,IEnumerable),但无济于事。使用[FromBody]
时,请求参数为null
,使用[ModelBinding]
时,列表为空。我尝试过使用这两种方法,但也无效。
我宁愿不必在我的客户端中使用循环单个帖子。
由于
答案 0 :(得分:22)
对于所有只是尝试一个空数组的人来说,试试这个:
var request = $.ajax({
dataType: "json",
url: "/api/users",
method: "POST",
data: { '': postData}
});
数据必须是单个匿名对象,而不是原始数组。
信息被发现here。
答案 1 :(得分:19)
由于您的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"
}]
答案 2 :(得分:2)
json包含request
参数名称非常重要。
另请注意:您必须将其作为数组发布。
你的json看起来像这样:
{
"request": [
{
"Id": "...",
"System": 1,
...
},
{ ... }
]
}