FluentValidation 不会在模型状态无效时自动拒绝请求
FluentValidation not rejecting requests automatically on invalid model state
验证者都放在同一个项目中(Startup.cs
)。
代码形式Startup.cs
:
services.AddControllers()
.AddFluentValidation(s =>
{
s.RegisterValidatorsFromAssemblyContaining<Startup>();
});
ModelState.IsValid 属性 实际上变为假,当请求数据不符合验证器设置规则时,但我需要手动设置实际的验证器错误消息。
验证器本身:
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);
}
}
基本上,我忘了用 [ApiController]
和 [Route]
属性标记我的 AuthenticationController。
验证者都放在同一个项目中(Startup.cs
)。
代码形式Startup.cs
:
services.AddControllers()
.AddFluentValidation(s =>
{
s.RegisterValidatorsFromAssemblyContaining<Startup>();
});
ModelState.IsValid 属性 实际上变为假,当请求数据不符合验证器设置规则时,但我需要手动设置实际的验证器错误消息。
验证器本身:
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);
}
}
基本上,我忘了用 [ApiController]
和 [Route]
属性标记我的 AuthenticationController。