Ho modello:regole di convalida convalida personalizzati Fluent
[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; }
}
E validatore per il modello:
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.");
}
}
ho fabbrica di convalida, che dovrebbe risolvere la dipendenza:
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);
}
}
ho IUserService, che ha metodi IsUsernameUnique(string name)
e IsEmailUnique (string email) `e voglio usarlo nella mia val classe idator (il modello dovrebbe essere valido solo se ha un nome utente e una e-mail univoci).
- come utilizzare il servizio per la convalida?
- è possibile registrare più regole di espressione regolare con diversi messaggi di errore? funzionerà sul lato client? (se no, come creare una logica di convalida personalizzata per questo?)
- è la convalida sul lato server funzionerà automaticamente prima del metodo pass in action, ed è sufficiente chiamare la proprietà ModelState.IsValid, oppure devo fare qualcosa di più ? UPDATE
- è possibile accedere a tutte le proprietà del modello quando si convalidano alcune proprietà? (Per esempio voglio mettere a confronto Password e ConfirmPassword quando il registro)
Circa 2: voglio avere mu piccole espressioni regolari e ogni regexp ha il proprio messaggio di errore. È possibile? –
@EvgenyLevin, ho già trattato questo aspetto nella mia risposta: "No, puoi avere solo un tipo di convalida per proprietà". Quindi hai 2 possibilità: o trovare una singola regex che possa validare tutto o usare la regola Must per scrivere una logica personalizzata. –
e non posso scrivere più di una. Anche le regole per la logica personalizzata? Si prega di guardare l'aggiornamento (punto 4). –