@dotnetcsharp

Как правильно настроить валидацию пароля в Blazor FluentValidation?

Есть класс
public class LoginModel
{
    [Required]
    [JsonPropertyName("Email")]
    public string Email { get; set; }
    [Required]
    [JsonPropertyName("Password")]
    public string Password { get; set; }
}


Класс валидации под вышеуказанную модель
public class LoginModelValidation : AbstractValidator<LoginModel>
{
    public LoginModelValidation()
    {
        RuleFor(p => p.Email).NotEmpty().WithMessage("You must enter a email address");
        RuleFor(x => x.Email).EmailAddress().WithMessage("Please enter valid an email");
        RuleFor(_ => _.Password).NotEmpty().WithMessage("Your password cannot be empty");
        RuleFor(_ => _.Password).MinimumLength(6).WithMessage("Your password length must be at least 6.");
        RuleFor(_ => _.Password).MaximumLength(16).WithMessage("Your password length must not exceed 16.");
        RuleFor(_ => _.Password).Matches(@"[A-Z]+").WithMessage("Your password must contain at least one uppercase letter.");
        RuleFor(_ => _.Password).Matches(@"[a-z]+").WithMessage("Your password must contain at least one lowercase letter.");
        RuleFor(_ => _.Password).Matches(@"[0-9]+").WithMessage("Your password must contain at least one number.");
        RuleFor(_ => _.Password).Matches(@"[\@\!\?\*\.]+").WithMessage("Your password must contain at least one (@!? *.)."); 
    }
}

Регистрация валидации
builder.Services.AddControllers().AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<LoginModelValidation>());


.razor
<EditForm Model="@loginModel" OnValidSubmit="SubmitForm" class="text-center">
    <FluentValidationValidator/>
    <label for="Email" class="float-start">Email</label>
    <InputText class="form-control border-0 text-white" type="email" name="Email" placeholder="Email" @bind-Value="loginModel.Email" />
    <ValidationMessage For="@(() => loginModel.Email)" />
    <label for="Password" class="float-start mt-2">Password</label>
    <InputText class="form-control border-0 text-white" type="password" name="Password" placeholder="Password" @bind-Value="loginModel.Password" />
    <ValidationMessage For="@(() => loginModel.Password)" />
    <div class="row">
        <div class="forgot">
            <a href="" class=" float-end">Forgot Password?</a>
        </div>
    </div>
    <div class="row">
    <div class="col">
        <button class="btn btn-primary border-0 text-center" type="submit" name="submit">Sign In</button>
        </div>
    </div>

</EditForm>


И получается так что если у Input тип "password", то валидация вообще не работает, всегда не проходит. Но если я в input поставлю тип текст, то все проверки валидации работают. Может я не так что делаю? Может это баг библиотеки FluentValidation? С одним типом input работает, с другим не работает.
66094741ed7aa511905507.jpeg
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Вы используете
fv.RegisterValidatorsFromAssemblyContaining<LoginModelValidation>())


Это автоматическая регистрация сервисов валидаци, но она не работает на .net 8 (И, вроде бы на .net 7, но жто не точно). По этому, если вы используете указанную версию .net, вас все валидаторы нужно регистрировать вручную
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы