Как разместить JSON массив в ASP. Net Базовое приложение с использованием Postman - PullRequest
0 голосов
/ 11 марта 2020

Я новичок в ASP. Net Разработка ядра. Я хочу разместить массив пользовательских классов на ASP. Net контроллер. Я могу разместить объект, но не массив.

Вот мой InventoryItem класс

public class InventoryItem
{
    public int Id { get; set; }
    public string ItemName { get; set; }
    public double Price { get; set; }
}

Вот мой метод в InventoryController Класс

public ActionResult<InventoryItem> AddInventoryItems([FromForm]InventoryItem[] items)
{
    return Ok("Array Length " + items.Length);
}

Я получая длину массива как 0.

Я использую Почтальон

Также я пробовал Публиковать данные как JSON и изменять * От 1020 * до [FromBody] атрибут:

Также я получаю 415 Неподдерживаемый тип носителя Ошибка в Почтальоне при изменении на [FromBody]. enter image description here

Ответы [ 4 ]

1 голос
/ 12 марта 2020

1. Получите данные в [FromForm], вы должны передать данные массива в следующем формате: enter image description here

2.Передать данные как JSON, вы следует использовать атрибут [FromBody] как Md Farid Uddin Kiron, предложенный выше:

public ActionResult<InventoryItem> AddInventoryItems([FromBody]InventoryItem[] items)
 {
        return Ok("Array Length " + items.Length);
 }
1 голос
/ 11 марта 2020

Вы пытаетесь неправильно. Как вы пытаетесь передать данные на ваш контроллер, который является типом коллекции. Таким образом, вы должны передать массив Json в соответствии с типом данных вашего контроллера. Вы можете сделать это следующим образом.

Выберите Body, затем Raw, затем Json Если вы хотите передать Json данные. Ваш массив

должен выглядеть следующим образом:

[
  {
    "id": 1,
    "itemName": "A",
    "price": 10.0
  },
  {
    "id": 2,
    "itemName": "B",
    "price": 20.0
  },
  {
    "id": 3,
    "itemName": "C",
    "price": 30.0
  }
]

Смотрите снимок экрана:

enter image description here

Test Result

enter image description here

Я пробовал как для вашего образца, который отлично работает:

        [HttpPost("[action]")]
        [Route("AddInventoryItems")]
        [ActionName("AddInventoryItems")]
        public ActionResult<InventoryItem> AddInventoryItems([FromBody]InventoryItem [] items)
        {
            return Ok("Array Length " + items.Count());

        }

Final Output:

enter image description here

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

But apart from your question I would suggest you to write your controller like below which mostly practice in C# and Web API

        [HttpPost("[action]")]
        [Route("AddInventoryItems")]
        [ActionName("AddInventoryItems")]
        public ActionResult<InventoryItem> AddInventoryItems([FromBody]List<InventoryItem> items)
        {
            return Ok("Array Length " + items.Count());

        }
0 голосов
/ 12 марта 2020

Подробно отвечая на мой собственный вопрос, как я решил проблему.

В коде C# не было проблем, только метод размещения данных в Почтальоне был неправильным.

См. Это ответьте, если 415 Неподдерживаемый тип носителя Ошибка почтальона. Код C# такой же, как в вопросе выше.

Я использую два способа размещения данных. Во-первых, публикация в виде данных формы, во-вторых, публикация в формате JSON.

1] При публикации массива пользовательского класса с использованием данных формы используйте метод Xueli Chen. Выберите Body -> form-data в Postman и введите массив. элементы типа items[index].key = value, такие как items[0].id = 1001 и items[0].ItemName = "Biscuits"

See here

2] При публикации массива пользовательского класса в формате JSON сначала выберите Body -> raw -> Выбрать JSON на языках. Если при выборе JSON есть предупреждающий знак, например this

, то Go К Headers -> Установите Content-Type = application/json точно так же, как

Сейчас Body -> raw JSON Массив данных

[
    {
        "Id": 1,
        "ItemName": "Biscuits",
        "Price": 20
    },
    {
        "Id": 1,
        "ItemName": "Cakes",
        "Price": 100
    }
]

и C# код в проекте изменения [FromForm] для [FromBody] атрибута

public ActionResult<InventoryItem> AddInventoryItems([FromBody]InventoryItem[] items)

и отправки на сервер

Короче говоря для Posting Array как form-data используйте items[index].key = value как items[0].ItemName = Biscuits в Почтальоне.

Для размещения массива как JSON Данные Введите JSON массив и проверьте, если Content-Type = application/json в Headers в Почтальоне.

Извините за длинный ответ.

0 голосов
/ 11 марта 2020

На самом деле вы используете неправильный способ отправки данных в виде запроса POST. Вы можете использовать raw вместо form-data и разместить json массив ваших InventoryItem.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...