mam model:Zaawansowany niestandardowych walidacji zasady walidacji
[Validator(typeof(RegisterValidator))]
public class RegisterModel
{
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string ListOfCategoriess { get; set; }
}
I validator dla modelu
public class RegisterValidator:AbstractValidator<RegisterModel>
{
public RegisterValidator(IUserService userService)
{
RuleFor(x => x.Name).NotEmpty().WithMessage("User name is required.");
RuleFor(x => x.Email).NotEmpty().WithMessage("Email is required.");
RuleFor(x => x.Email).EmailAddress().WithMessage("Invalid email format.");
RuleFor(x => x.Password).NotEmpty().WithMessage("Password is required.");
RuleFor(x => x.ConfirmPassword).NotEmpty().WithMessage("Please confirm your password.");
}
}
mam fabrykę validator, który powinien rozwiązać zależność:
public class WindsorValidatorFactory : ValidatorFactoryBase
{
private readonly IKernel kernel;
public WindsorValidatorFactory(IKernel kernel)
{
this.kernel = kernel;
}
public override IValidator CreateInstance(Type validatorType)
{
if (validatorType == null)
throw new Exception("Validator type not found.");
return (IValidator) kernel.Resolve(validatorType);
}
}
mam IUserService, który ma metody IsUsernameUnique(string name)
i IsEmailUnique (string e-mail) `i chce go użyć w moim val klasa idator (model powinien być ważny tylko wtedy, gdy ma unikalną nazwę użytkownika i adres e-mail).
- Jak używać mojej usługi do sprawdzania poprawności?
- Czy można zarejestrować wiele reguł wyrażeń regularnych z różnymi komunikatami o błędach? czy będzie działać po stronie klienta? (jeśli nie, jak utworzyć dla niego niestandardową logikę walidacji?)
- to sprawdzanie poprawności po stronie serwera będzie działało automatycznie przed metodą przekazania modelu w działaniu i wystarczy wywołać właściwość ModelState.IsValid lub muszę zrobić coś więcej ? UPDATE
- Czy możliwy jest dostęp do wszystkich właściwości modelu podczas sprawdzania poprawności niektórych właściwości? (Na przykład chcę porównać hasło i ConfirmPassword gdy rejestr)
O 2: chcę mieć mu Zmodyfikuj wyrażenie, a każdy regexp ma własny komunikat o błędzie. Czy to możliwe? –
@EvgenyLevin, już to omówiłem w mojej odpowiedzi: "Nie, możesz mieć tylko jeden typ sprawdzania poprawności dla każdej właściwości". Masz więc dwie możliwości: albo wymyśl jedno wyrażenie, które może sprawdzić wszystko, albo użyj reguły Must, aby napisać niestandardową logikę. –
i nie mogę zapisać więcej niż jednej. Czy reguły dla niestandardowej logiki też? Proszę spojrzeć na aktualizację (punkt 4). –