Проводка массива объектов с помощью 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]
список пуст. Я пробовал использовать оба, и это тоже не работает.
Я бы предпочел не прибегать к циклизации одиночных сообщений в моем клиенте.
Спасибо
Ответы
Ответ 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,
...
},
{ ... }
]
}