ruleset net examples c# .net string validation fluentvalidation

c# - net - FluentValidation string NotNull versus NotEmpty



fluentvalidation ruleset (2)

Originalmente, al escribir la lógica de validación para cadenas, decidí usar NotEmpty para cualquier cadena que fuera necesaria. Cuando se usa .NotEmpty (). Longitud (min, max) esto causará que se devuelvan dos errores en lugar de uno solo cuando se pasa una cadena vacía.

¿Cómo se pueden prevenir los errores redundantes?


.Length (min, max) no devolverá un error si la cadena es nula, pero devolverá un error cuando la cadena esté vacía y min sea mayor que 0. Hay dos formas de implementar una cadena requerida con una longitud mínima mayor que 0.

La forma típica de detenerse en el primer error es usar el método en cascada:

RuleFor(o => o.PropertyName) .Cascade(CascadeMode.StopOnFirstFailure) .NotEmpty() // Will return an error if null or empty .Length(2, 10) // Will only return an error if length == 1 or > than 10

Sin embargo, para las cadenas, es más fácil leer lo siguiente:

RuleFor(o => o.PropertyName) .NotNull() .Length(2, 10) // Will not return an error on null

Escenarios de validación de cadenas usando NotNull, NotEmpty y Length:

Opcional con una longitud máxima:

RuleFor(o => o.PropertyName).Length(0, max);


Opcional con una longitud mínima y máxima:

RuleFor(o => o.PropertyName).Length(min, max);


Requerido pero puede tener una longitud de cero:

RuleFor(o => o.PropertyName).NotNull()


Requerido y debe tener una longitud distinta de cero:

RuleFor(o => o.PropertyName).NotEmpty();


Requerido y tiene una longitud máxima:

RuleFor(o => o.PropertyName).NotNull().Length(0, max);


Requerido y tiene una longitud mínima y máxima:

RuleFor(o => o.PropertyName).NotNull().Length(min, max);


Otra forma de evitar que se produzcan errores adicionales sería establecer el modo en cascada .

RuleFor(x => x.PropName) .Cascade(CascadeMode.StopOnFirstFailure) .NotEmpty() .Length(min, max);