Validators are all placed in the same project (with the Startup.cs
).
Code form Startup.cs
:
services.AddControllers()
.AddFluentValidation(s =>
{
s.RegisterValidatorsFromAssemblyContaining<Startup>();
});
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);
}
}
Basically, I forgot to mark my AuthenticationController with [ApiController]
and [Route]
attributes.