Подтвердить что ты не робот

Проводка массива объектов с помощью MVC 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] список пуст. Я пробовал использовать оба, и это тоже не работает.

Я бы предпочел не прибегать к циклизации одиночных сообщений в моем клиенте.

Спасибо

4b9b3361

Ответ 1

Поскольку ваш 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

Для всего, что просто получить пустой массив, что бы они ни пытались, попробуйте следующее:

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

Данные должны представлять собой один анонимный объект вместо необработанного массива.

Информация была найдена здесь.

Ответ 3

Важно, чтобы ваш json содержал имя параметра request. Другое примечание: вы должны разместить его как массив.

Ваш json будет выглядеть так:

{
    "request": [
        {
            "Id": "...",
            "System": 1,
            ...
        },
        { ... }
    ]
}