Маршрут ASP.NET Core никогда не выполняется при использовании [FromBody] viewModel, но он работает, если используется объект [FormBody]? - PullRequest
0 голосов
/ 09 июня 2019

Я хотел бы отправить сообщение, запрос на исправление на свой бэкэнд-сервер. Я отправляю запрос с угловым значением и прикрепляю объект, который нужно обновить, в теле запроса следующим образом:

`
    return this.http
          .patch<GearItem>(
            `${this.merchandiseUrl}/${gearItem.id}`,
            JSON.stringify(gearItem),
            this.headers
          )
`

На сервере у меня есть следующий маршрут:

`
[HttpPatch("{id}")]
    public async Task<IActionResult> Update([FromBody] GearItemViewModel gearItem)
    {

      return Ok();
    }
`

Этот маршрут никогда не выполняется, однако, когда я изменяю его на:

[HttpPatch("{id}")]
    public async Task<IActionResult> Update([FromBody] object gearItem)
    {

      return Ok();
    }

Маршрут получает удар и выполняется.

Структура объекта, который я посылаю из углового вида, выглядит следующим образом:

`
formData: FormData {}
id: 3
images: (3) [{…}, {…}, {…}]
inStock: true
name: "Hat"
price: 27
sizes: (6) [{…}, {…}, {…}, {…}, {…}, {…}]
`

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

public class GearItemViewModel
  {
    public long Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public bool InStock { get; set; }
    public string FormData { get; set; }
    public IEnumerable<GearSizeViewModel> Sizes { get; set; }
    public IEnumerable<GearImageViewModel> Images { get; set; }
  }

Я не уверен, почему я не могу получить объект viewModel через аргументы метода Update, используя атрибут [FromBody]. В журналах я вижу что-то о Executing ObjectResult, writing value of type 'Microsoft.AspNetCore.Mvc.ValidationProblemDetails'. Но я не знаю, почему возникает проблема с проверкой, когда модели из внутреннего и внешнего интерфейса имеют одинаковые имена свойств.

1 Ответ

1 голос
/ 09 июня 2019

В классе GearItemViewModel у вас есть свойство FormData, которое имеет тип string, но объект, который вы отправляете из angular, имеет свойство formData со значением FormData {} , которое не является строковым типом. Вот почему это не отображается с GearItemViewModel в контроллере

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