Неправильная проверка модели ASP NET Core 2

Я работаю на тесте ASP.NET Core 2.0 Сервис для расширения моих знаний в области программирования, чтобы включить опыт работы на стороне сервера. У меня есть класс "Модель регистрации", который отправляется в службу, когда пользователь регистрируется в моем приложении. мой RegistrationModel класс ниже:

public class RegistrationModel
{
    [Required]
    public string Username { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    [EmailAddress]
    public string Email { get; set; }
    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Required]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

RegisterUser Метод, который я вызываю, ниже. Я отправляю данные в службу и извлекаю их из Body вызова.

[HttpPost(nameof(RegisterUser))]
[AllowAnonymous]
public async Task<IActionResult> RegisterUser([FromBody] RegistrationModel registrationInfo)

При отправке JSON в службу ModelState.IsValid всегда имеет значение true, если я не отправляю нулевой объект. Если я отправляю полностью пустой объект, ModelState.IsValid по-прежнему имеет значение true. Я также попытался удалить [FromBody] из списка параметров для метода, и это ничего не изменило.

Есть ли какая-то опция, которую нужно установить в файле startup.cs для автоматической проверки моделей, или мне нужно выполнить ручную проверку? Если мне нужно предоставить какую-либо другую информацию, просто дайте мне знать.

2 ответа

В моем сервисе я звонил services.AddMvcCore() скорее, чем services.AddMvc() так как это строго Api и не будет иметь веб-вид.

Когда используешь services.AddMvcCore() Вы должны указать множество функций, которые services.AddMvc() по умолчанию. Одна особенность, которую я не указывал, была .AddDataAnnotations(), Добавление этого к моему существующему вызову services.AddMvcCore().AddJsonFormatters().AddAuthorization=(...) все исправил.

Проверка модели включена из коробки.

Я создал новый проект на основе шаблона ASP.NET Core 2.0, предоставленного Visual Studio, и он работал нормально.

Вот реализация действия:

public Task<IActionResult> Register([FromBody] RegistrationModel model)
{
    return Task.FromResult<IActionResult>(Ok(new { ModelState.IsValid, ModelState.Values }));
}

Отправка следующего JSON:

{
    "Username": "Mick",
    "FirstName": "Mick",
    "LastName": "Mick",
    "Email": "mick@mick.com",
    "Password": "MickMick",
    "ConfirmPassword": "MickMick"
}

произведено:

{
    "isValid": true,
    "values": []
}

Тем не менее, отправка следующей полезной нагрузки:

{
    "Username": "Mick",
    "FirstName": "",
    "LastName": "Mick",
    "Email": "",
    "Password": "MickMick",
    "ConfirmPassword": ""
}

произвел следующий ответ:

{
  "isValid": false,
  // some properties omitted for brevity
  "values": [
    {
      "key": "Email",
      "errors": [
        {
          "errorMessage": "The Email field is required."
        }
      ]
    },
    {
      "key": "FirstName",
      "errors": [
        {
          "errorMessage": "The FirstName field is required."
        }
      ]
    },
    {
      "key": "ConfirmPassword",
      "errors": [
        {
          "errorMessage": "The ConfirmPassword field is required."
        },
        {
          "errorMessage": "The password and confirmation password do not match."
        }
      ]
    }
  ]
}

Не могли бы вы описать, как вы попали в конечную точку и какую именно полезную нагрузку вы отправляете в запросе?

Другие вопросы по тегам