0Pricing
C# Academy · Lección

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.DependencyInjectionExtensions

La 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

  1. Validación con Data Annotations
  2. Reglas de FluentValidation
  3. Reglas personalizadas y condicionales
  4. Integración de la validación con las API
← Volver a C# Academy