Saltar al contenido

Detener Fluent Validation en el primer error

Es imprescindible interpretar el código bien previamente a aplicarlo a tu proyecto si tquieres aportar algo puedes dejarlo en los comentarios.

Solución:

solo busca null antes de ejecutar las reglas que dependen de ellos, utilizando un When condición.

this.CascadeMode = CascadeMode.StopOnFirstFailure;
RuleFor(x => x.TechnicalHeader).NotNull().WithMessage("Header cannot be null");

// Ensure TechnicalHeader is provided
When(x => x.TechnicalHeader != null, () => 
    RuleFor(x => x.TechnicalHeader.Userid).NotEmpty().WithMessage("Userid cannot be null or an empty string");
    RuleFor(x => x.TechnicalHeader.CabCode).GreaterThan(0).WithMessage("CabCode cannot be or less than 0");
    RuleFor(x => x.TechnicalHeader.Ndg).NotEmpty().WithMessage("Ndg cannot be null or an empty string");
);

Puede usar Reglas dependientes.

RuleFor(object => object.String)
    .NotNull()
    .DependentRules(() =>
    
        RuleFor(object => object.String)
            .NotEmpty()
            .Matches("^[A-Z]3$");
    );

Entonces no duplicas el código de validación.

Incluso puede agregar un método de extensión para no duplicar el RuleFor.

    public static IRuleBuilderOptions DependentRules(
        this IRuleBuilderOptions currentRule, 
        Action> action)
    
        return currentRule.DependentRules(() => action(currentRule));
    

Así que el código definitivo:

RuleFor(object => object.String)
    .NotNull()
    .DependentRules(currentRule =>
    
        currentRule
            .NotEmpty()
            .Matches("^[A-Z]3$");
    );

Solo agrega SetValidator antes de ejecutar las reglas que dependen de ellos, utilizando un Custom condición:

//if InpatOrderImportValidatorBllNode fail ,the custom method cannot be executed
RuleFor(x => x).Cascade(CascadeMode.StopOnFirstFailure)
               .SetValidator(new InpatOrderImportValidatorBllNode())
               .Custom((input, context) =>           
                  context.AddFailure(new ValidationFailure("DrugTypeName", "fail"));
               );

Si conservas alguna suspicacia y forma de enriquecer nuestro crónica te sugerimos añadir una apostilla y con placer lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *