Не удается отправить коллекцию целых чисел в метод Post API Web Core, он имеет значение null


Я хочу отправить коллекцию целых чисел в метод post на web core api.

Метод такой;

[HttpPost("open")]
public IActionResult OpenInspections([FromBody]IEnumerable<int> inspectionIds)
{
    return NoContent();
//...

Это просто для тестирования, я поставил точку останова на операторе return, и полезная нагрузка inspectionIds равна null.

В почтальоне у меня есть

Введите описание изображения здесь

EDIT: я только что удалил квадратные скобки из подписи. Я пробовал и IEnumerable<int>, и int[], но ни то, ни другое не сработало

2 5

2 ответа:

Он является нулевым, поскольку то, что разнесено и то, что ожидается действием, не совпадает, поэтому он не связывает модель при разнесении. Пример передаваемых данных имеет массив string ["11111111", "11111112"], а не массив int [11111111, 11111112],

Также IEnumerable<int>[] представляет собой набор коллекций, таких как

{ "inspectionIds": [[11111111, 11111112], [11111111, 11111112]]}

Чтобы получить желаемое поведение, либо обновите действие, чтобы ожидать желаемого типа данных

[HttpPost("open")]
public IActionResult OpenInspections([FromBody]int[] inspectionIds) {
    //...
}

Убедившись, что опубликованное тело также соответствует тому, что есть ожидаемый

[11111111, 11111112]

Или

Рассмотрим использование конкретной модели, поскольку размещенные данные в представленном вопросе являются объектом JSON .

public class Inspection {
    public int[] inspectionIds { get; set; }
}

И соответственно обновить действие

[HttpPost("open")]
public IActionResult OpenInspections([FromBody]Inspection model) {
    int[] inspectionIds = model.inspectionIds;
   //...
}

Модель также должна соответствовать ожидаемым данным, которые будут опубликованы.

{ "inspectionIds": [11111111, 11111112] }
Обратите внимание, что если желаемые идентификаторы должны быть int, то не заключайте их в кавычки.

Я думаю, что проблема здесь: IEnumerable<int>[] - это массив списков int?

Это должно быть просто int[] (или это может быть IEnumerable<int>).