Reglas de FluentValidation
Escriba validadores expresivos con sintaxis fluida.
Reglas de FluentValidation es una lección gratuita de C# Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C# Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C# Academy incluye 4 lecciones en total.
¿Por qué FluentValidation?
FluentValidation es una biblioteca popular de .NET que traslada las reglas de validación fuera de los modelos y las coloca en clases de validación específicas. Las reglas se expresan mediante una API legible y encadenable (fluent), lo que mantiene limpios los modelos y permite probar las reglas.
dotnet add package FluentValidation
dotnet add package FluentValidation.DependencyInjectionExtensionsLa clase base AbstractValidator
Para escribir un validador, herede de AbstractValidator<T>, donde T es el modelo que va a validar. Las reglas se definen en el constructor.
using FluentValidation;
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
// rules go here
}
}Definición de la primera regla con RuleFor
RuleFor selecciona una propiedad mediante una lambda y, a continuación, permite encadenar validadores. NotEmpty() rechaza valores null, cadenas vacías y valores predeterminados.
public class CustomerValidator : AbstractValidator<Customer>
{
public CustomerValidator()
{
RuleFor(c => c.Name).NotEmpty();
}
}Encadenamiento de varios validadores
Cada RuleFor puede encadenar varios validadores. Se ejecutan en orden y todos deben cumplirse. El resultado se lee casi como una frase.
RuleFor(c => c.Name)
.NotEmpty()
.MinimumLength(2)
.MaximumLength(50);Validadores integrados
FluentValidation incluye muchos validadores: NotNull, NotEmpty, EmailAddress, Length, InclusiveBetween, GreaterThan, Matches (regex) y otros.
RuleFor(c => c.Email).NotEmpty().EmailAddress();
RuleFor(c => c.Age).InclusiveBetween(18, 120);
RuleFor(c => c.Phone).Matches(@"^\+?[0-9]{7,15}$");Mensajes de error personalizados
Use WithMessage para sustituir el mensaje predeterminado. Puede interpolar marcadores de posición como {PropertyName} y {PropertyValue}.
RuleFor(c => c.Email)
.NotEmpty().WithMessage("Email is required.")
.EmailAddress().WithMessage("{PropertyValue} is not a valid email.");Códigos de error y niveles de gravedad personalizados
Además de los mensajes, puede adjuntar un WithErrorCode legible por máquinas y un WithSeverity (Error, Warning, Info) para ayudar a los clientes a reaccionar de forma diferente.
RuleFor(c => c.Name)
.NotEmpty()
.WithErrorCode("NAME_REQUIRED")
.WithSeverity(Severity.Error);Validación de objetos anidados
Use SetValidator para reutilizar un validador para un objeto secundario y mantener las reglas modulares.
public class OrderValidator : AbstractValidator<Order>
{
public OrderValidator()
{
RuleFor(o => o.Customer).SetValidator(new CustomerValidator());
}
}Validación de colecciones
RuleForEach aplica reglas a cada elemento de una colección.
public class OrderValidator : AbstractValidator<Order>
{
public OrderValidator()
{
RuleForEach(o => o.Items)
.ChildRules(item => item.RuleFor(i => i.Quantity).GreaterThan(0));
}
}Ejecución manual de un validador
Puede invocar directamente un validador e inspeccionar el resultado. ValidationResult expone IsValid y una lista Errors.
var validator = new CustomerValidator();
ValidationResult result = validator.Validate(customer);
if (!result.IsValid)
{
foreach (var error in result.Errors)
{
Console.WriteLine(error.PropertyName + ": " + error.ErrorMessage);
}
}Validación asíncrona
Cuando una regla necesita realizar operaciones de E/S, como una comprobación en la base de datos, use ValidateAsync y validadores asíncronos como MustAsync, que analizaremos en la lección sobre reglas personalizadas.
ValidationResult result = await validator.ValidateAsync(customer);Comprobación rápida
Compruebe sus conocimientos básicos de FluentValidation.
Resumen
FluentValidation coloca las reglas en clases AbstractValidator<T>. RuleFor selecciona una propiedad y, a continuación, permite encadenar validadores integrados como NotEmpty, EmailAddress e InclusiveBetween. Personalice los mensajes con WithMessage, WithErrorCode y WithSeverity, reutilice la lógica con SetValidator y RuleForEach, y ejecute las reglas mediante Validate/ValidateAsync.
Preguntas frecuentes
¿La lección «Reglas de FluentValidation» es gratis?
Sí — el texto completo de «Reglas de FluentValidation» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C# Academy, actualiza a CoddyKit PRO. El curso de C# Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Reglas de FluentValidation»?
Escriba validadores expresivos con sintaxis fluida. Practicas C# Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar C# Academy?
No se requiere experiencia previa. C# Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Reglas de FluentValidation»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de C# Academy?
Sí. Cada lección de C# Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Validación con Data Annotations
- Reglas de FluentValidation
- Reglas personalizadas y condicionales
- Integración de la validación con las API