Как правильно использовать POST-массивы (списки) объектов в .NET Core 2? - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть метод API с этой подписью:

public async Task<IActionResult> PostCompanies([FromBody] List<Company> companies)

... и автоматически созданные документы swagger показывают, что JSON должен быть простым массивом:

 [  
       {
          "fuelSiteId":228972,
          "name": "foo"
       },
       {
          "fuelSiteId":300000010,
          "name": "bar"
       }
 ]

Однако, если я отправлю это обратно, это не сработает, и я получу ошибку:

"Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип 'Company', поскольку тип требует объект JSON"

Исправлено добавление массива в фиктивное свойство:

{  
    data: [
       {
          "fuelSiteId":228972,
          "name": "foo"
       },
       {
          "fuelSiteId":300000010,
          "name": "bar"
       }
    ]
}

Но все, что я нахожу на этом сайте, подразумевает, что в этом нет необходимости, и это не то, что вы обычно делаете в REST. Кроме того, это означает, что автоматически сгенерированные документы не должны публиковаться!

Что не так? Мой код API или документы Swagger автоматического поколения или что-то еще?

В идеале я бы предпочел, чтобы мой API принимал «простую» версию, поскольку она кажется более стандартной и более естественной.

1 Ответ

0 голосов
/ 09 ноября 2018

Это также работает без необходимости переноса в другой тип, попробуйте. Я тестировал с почтальоном

    [HttpPost]
    public JsonResult InsertPatientAppointment([FromBody] List<Company> companies)
    {
        return new JsonResult(companies.Select(c =>
            new
            {
                c.FuelSiteId,
                c.Name,
            }
        ));
    }

    public class Company
    {
        [JsonProperty("fuelSiteId")]
        public int FuelSiteId
        {
            get;
            set;
        }
        [JsonProperty("name")]
        public string Name
        {
            get;
            set;
        }
    }

screenshot on the breackpoint

Вы также можете проверить другой ресурс на SO , как разместить массив объектов json на веб-интерфейсе Мне пришлось самому копать, так как я уже не помнил, как это сделать ..

Как указано в Привязка параметров в ASP.NET Web API : "Чтобы заставить Web API читать сложный тип из URI, добавьте атрибут [FromUri] к параметру."

Использование [FromBody]

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