Tengo modelo:reglas de validación personalizadas validación Fluido
[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; }
}
y validadores para el modelo:
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.");
}
}
tengo fábrica validador, que debe resolver la dependencia:
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);
}
}
tengo IUserService, que tiene los métodos IsUsernameUnique(string name)
e IsEmailUnique (cadena de correo electrónico) `y desea usarlo en mi val clase de idator (el modelo debe ser válido solo si tiene un nombre de usuario y correo electrónico únicos).
- cómo utilizar mi servicio para la validación?
- ¿es posible registrar varias reglas de expresión regular con diferentes mensajes de error? ¿Funcionará en el lado del cliente? (Si no, ¿cómo crear una lógica de validación personalizada para él?)
- la validación en el servidor funcionará automáticamente antes del método de paso de modelo en acción, y es suficiente para llamar a la propiedad ModelState.IsValid, o tengo que hacer algo más ? ACTUALIZACIÓN
- ¿es posible acceder a todas las propiedades del modelo cuando se valida alguna propiedad? (Por ejemplo, quiero comparar contraseña y cuando ConfirmPassword registro)
Acerca de 2: quiero tener mu ltiples expresiones regulares y cada expresión regular tiene su propio mensaje de error. ¿Es posible? –
@EvgenyLevin, ya he cubierto esto en mi respuesta: 'No, solo puede tener un tipo de validación por propiedad'. De modo que tiene 2 posibilidades: ya sea que se le ocurra una sola expresión regular que pueda validar todo o use la regla Debe para escribir alguna lógica personalizada. –
y no puedo escribir más de uno. ¿Las reglas para la lógica personalizada también? Por favor mira la actualización (punto 4). –