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)