使用MVC Web API发布对象数组

时间:2013-04-16 16:59:36

标签: c# deserialization asp.net-web-api

我有一个基本的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]时,列表为空。我尝试过使用这两种方法,但也无效。

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

由于

3 个答案:

答案 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,
            ...
        },
        { ... }
    ]
}