Search code examples
c#asp.net-corefluentvalidation

FluentValidation not rejecting requests automatically on invalid model state


Validators are all placed in the same project (with the Startup.cs).
Code form Startup.cs:

services.AddControllers()
    .AddFluentValidation(s =>
    {
        s.RegisterValidatorsFromAssemblyContaining<Startup>();
    });

ModelState.IsValid property actually turns false, when request data does not meet validator-set rules, but I need actual validator error messages set manually.

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

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

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

Solution

  • Basically, I forgot to mark my AuthenticationController with [ApiController] and [Route] attributes.