FluentValidation валидатор не возвращает BadRequest автоматически

Я хочу внедрить валидацию на основе FluentValidation в мой Web API. Проблема в том, что когда, казалось бы, валидатор должен отсекать невалидные запросы возвращая статус код 400 (Bad Request) и также в теле ответа укзаывать список ошибок которые были допущены отправителем при формировании запроса, он их почему-то пропускает дальше на обработку контроллером.

При этом всём ModelState.IsValid успешно устанавливается в true когда ошибок в запросе нету и в false когда они есть соответственно.

Я даже написал unit тест чтобы проверить, работает ли валидатор исправно если проводить валидацию вручную - работает...

Вот как я его внедряю в проект в Startup.cs:

services.AddControllers()
    .AddFluentValidation(s =>
    {
        s.RegisterValidatorsFromAssemblyContaining<UserRegistrationRequestValidator>();
        s.RunDefaultMvcValidationAfterFluentValidationExecutes = false;
    });

Код самого валидатора:

public class UserRegistrationRequestValidator : AbstractValidator<RegisterUserRequest>
{
    /// <summary>
    /// Initializes a new instance of the <see cref="UserRegistrationRequestValidator"/> class.
    /// </summary>
    public UserRegistrationRequestValidator()
    {
        RuleFor(r => r.Email)
            .Matches("^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$")
            .WithMessage(RegistrationRequestValidatorMessages.WrongEmailFormat);
        RuleFor(r => r.Password)
            .Matches("^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[@$!%*?&])[A-Za-z\\d@$!%*?&]{8,}$")
            .WithMessage(RegistrationRequestValidatorMessages.PasswordFormatNotValid);

        RuleFor(r => r.FirstName)
            .Matches("^[A-Za-z]{2,15}$")
            .WithMessage(RegistrationRequestValidatorMessages.FirstNameWrongFormat);

        RuleFor(r => r.LastName)
            .Matches("^[A-Za-z]{2,15}$")
            .WithMessage(RegistrationRequestValidatorMessages.LastNameWrongFormat);
    }
}

И модель для которой он должен проводить валидацию:

public class RegisterUserRequest
{
    /// <summary>
    /// Gets or sets user's e-mail.
    /// </summary>
    public string Email { get; set; }

    /// <summary>
    /// Gets or sets provided password.
    /// </summary>
    public string Password { get; set; }

    /// <summary>
    /// Gets or sets user's first name.
    /// </summary>
    public string FirstName { get; set; }

    /// <summary>
    /// Gets or sets user's last name.
    /// </summary>
    public string LastName { get; set; }
}

Все эти классы находятся в одном проекте. Помогите, пожалуйста...

АПДЕЙТ
Как выяснилось, запросы не отсекаются только при попытке регистрации нового пользователя. Я использую простейшую авторизацию на Cookie. Причины всё равно пока не известны.


Ответы (1 шт):

Автор решения: kostyabek

Как оказалось, я просто забыл пометить контроллер для аутентификации атрибутами [ApiController] и [Route].

→ Ссылка