Неправильная проверка модели 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."
}
]
}
]
}
Не могли бы вы описать, как вы попали в конечную точку и какую именно полезную нагрузку вы отправляете в запросе?