Добрый день,
В .net core апи контроллер наследуется от ControllerBase и ему добавляется атрибут [ApiController] который содержит в себе какой-то готовый функционал.
Но при этом валидация уже встроена в конвейер обработки запроса. Я хотел бы по прежнему пользоваться атрибутом [ApiController] но использовать свой обработчик валидации (например, возвращать 422 код ошибки вместо 400)
[Route("api/[controller]/[action]")]
[AllowAnonymous]
[ApiController]
public class AuthController : ControllerBase
{
private readonly IAuthService service;
public AuthController(IAuthService service)
{
this.service = service;
}
[HttpPost]
[Produces(typeof(UserDto))]
public async Task<IActionResult> LogIn([FromBody] LoginDto model)
{
var user = await service.LogIn(model);
await SignInAsync(user);
return Ok(user);
}
}
public class LoginDto
{
[Required]
public string Login { get; set; }
[Required]
public string Password { get; set; }
}
Таким образом, если я вызову метод LogIn, но в модели LoginDto не будет заполнено поле Login - мне в ответ вернётся такой результат:
{
"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title":"One or more validation errors occurred.",
"status":400,
"traceId":"00-a0b13ea44a9cb5250a7f22771528056d-e04f1f934fc804a6-00",
"errors":{"Login":["The Login field is required."]}
}
То есть тут непонятная мне модель, непонятные поля и это даже не просто ModelStateDictionary.
Я не нашел в доках как можно переопределить валидацию в конвейере апи контроллера, помогите, пожалуйста