Проверка модели с использованием аннотаций данных не работает на Mac VS.NET - PullRequest
1 голос
/ 16 мая 2019

Я создал новое приложение Web API на MacOS с VS.NET.Я добавил модель со следующим кодом:

public class PersonAddRequest {
   [Required]
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

Затем я создал контроллер Web API следующим образом:

[Route("api/[controller]")]
[ApiController]
public class PeopleController : ControllerBase {
   [HttpPost]
   public IActionResult Post(PersonAddRequest model) {
      return base.Ok(model);
   }
}

При использовании PostMan я публикую JSON как так (обратите внимание, что firstName отсутствует):

{
   "lastName":"McDonalds"
}

Когда я запускаю этот код в приложении веб-API, созданном в ОС Windows, проверка правильности работает.Однако, когда я создаю проект в MacOS, проверка не работает.

Когда я создаю проект в ОС Windows, затем открываю и запускаю его в MacOS, проверка работает!

Так что мой вопрос,это функция, которая отсутствует как часть лесов в VS.NET для Mac?

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Я хочу поблагодарить @nelsontruran за помощь в изучении VS.NET на Mac. На самом деле я использую более позднюю версию Mac (10.14.5 Mojave). Однако версия не имеет ничего общего с исходной проблемой.

Через пациентов и настойчивую помощь @nelsontruran я пересоздал проект, но вместо использования предложенных шаблонов я немного покопался в поиске правильного приложения (не доверяю предлагаемым приложениям в VS.NET). Вот пошаговые инструкции по созданию API, который автоматически выполняет проверку модели:

  1. Открыть VS.NET для Mac
  2. Создать новый проект
  3. При появлении запроса «Выберите шаблон для нового проекта» выберите «Приложение» в разделе «.Net Core» на левой боковой панели.
  4. На правой боковой панели выберите API

Оттуда вы можете просмотреть пример @ nelsontruran на git , чтобы увидеть магию проверки модели.

Полагаю, я мог выбрать «Веб-приложение», полагая, что в Mac оно будет таким же, как и в Windows.

Простая оплошность с моей стороны. Я надеюсь, что это поможет кому-то, кто был смущен и борется как я.

Еще раз спасибо @nelsontruran !!!

0 голосов
/ 16 мая 2019

Для аргумента тела требуется атрибут FromBody:

[Route("api/[controller]")]
[ApiController]
public class PeopleController : Controller
{
    [HttpPost]
    public IActionResult Post([FromBody]PersonAddRequest model) 
    {
        return Ok(model);
    }
}

Требуется для проверки модели.

Вот пример git repo , использующий эту форму проверки модели, которая подтверждается работой на MacOS Mojave 10.14.4

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