Как проверить состояние модели?
Проверьте контроллер ModelState
в действии, чтобы получить состояние модели.
получениечитаемая строка из всех ошибок и возвращает BadRequest с этой ошибкой?
Используйте BadRequest(ModelState)
, чтобы вернуть HTTP-запрос неверного запроса, который проверит состояние модели и создаст сообщение с использованием ошибок.
Завершенный код
/// <summary>
/// API endpoint to login a user
/// </summary>
/// <param name="data">The login data</param>
/// <returns>Unauthorizied if the login fails, The jwt token as string if the login succeded</returns>
[AllowAnonymous]
[Route("login")]
[HttpPost]
public IActionResult Login([FromBody]LoginData data) {
if(ModelState.IsValid) {
var token = _manager.ValidateCredentialsAndGenerateToken(data);
if (token == null) {
return Unauthorized();
} else {
return Ok(token);
}
}
return BadRequest(ModelState);
}
Конечно, я мог бы написать все сам вспомогательным методом ... Но я подумал о фильтре, может быть?
Чтобы избежатьповторяющийся код ModelState.IsValid
в каждом действии, где требуется проверка модели, вы можете создать фильтр для проверки состояния модели и короткого замыкания запроса.
Например,
public class ValidateModelAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext context) {
if (!context.ModelState.IsValid) {
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
Может применятьсянепосредственно к действию
[ValidateModel] //<-- validation
[AllowAnonymous]
[Route("login")]
[HttpPost]
public IActionResult Login([FromBody]LoginData data) {
var token = _manager.ValidateCredentialsAndGenerateToken(data);
if (token == null) {
return Unauthorized();
} else {
return Ok(token);
}
}
или добавлено глобально для применения ко всем запросам, где необходимо проверить состояние модели.
Ссылка Проверка модели в ASP.NET Core MVC