29

我有一个基本的后期操作,适用于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"
}

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

{
    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]列表时为空。我试过两者都用,也不管用。

我宁愿不必求助于在我的客户中循环单个帖子。

谢谢

4

3 回答 3

24

对于所有他们尝试得到一个空数组的人,试试这个:

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

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

信息在这里找到。

于 2014-10-01T11:52:06.017 回答
21

由于您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"
}]
于 2013-04-16T17:46:56.413 回答
2

重要的是您的 json 包含request参数名称。另一个注意事项:您必须将其作为数组发布。

你的 json 看起来像这样:

{
    "request": [
        {
            "Id": "...",
            "System": 1,
            ...
        },
        { ... }
    ]
}
于 2013-04-16T17:02:48.193 回答