FluentValidation para C# (.NET): guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué es FluentValidation y para qué sirve?

\n\n

FluentValidation es una biblioteca popular para .NET, diseñada para construir reglas de validación de objetos de negocio estrictas y legibles. A diferencia de los atributos de validación integrados (Data Annotations), FluentValidation ofrece un enfoque basado en la separación de la lógica de validación y el modelo de datos. Esto hace que el código sea más limpio, comprobable y flexible.

\n\n

La biblioteca utiliza una "interfaz fluida" (Fluent Interface), que permite construir cadenas de reglas de validación mediante notación de puntos. FluentValidation admite escenarios complejos: validaciones en cascada, reglas condicionales, validadores personalizados, trabajo con listas y objetos anidados.

\n\n

¿Para qué sirve FluentValidation?

\n
    \n
  • Separación de responsabilidades: Las reglas de validación no contaminan el modelo de datos.
  • \n
  • Legibilidad: Las cadenas de reglas son fáciles de leer y mantener.
  • \n
  • Flexibilidad: Es fácil crear reglas complejas, condicionales y compuestas.
  • \n
  • Capacidad de prueba: Los validadores se pueden probar como clases normales.
  • \n
  • Integración: Se integra perfectamente con ASP.NET Core, MVC, Web API y otros frameworks.
  • \n
\n\n

Instalación de FluentValidation

\n\n

La instalación de la biblioteca se realiza a través del administrador de paquetes NuGet. Ejecute uno de los siguientes comandos en la consola del administrador de paquetes o en la terminal de .NET CLI:

\n\n
// Instalación a través de Package Manager Console\nInstall-Package FluentValidation\n\n// Instalación a través de .NET CLI\ndotnet add package FluentValidation
\n\n

Para la integración con ASP.NET Core, también se requiere el paquete:

\n\n
dotnet add package FluentValidation.AspNetCore
\n\n

Inicio rápido: ejemplo de código

\n\n

Supongamos que tenemos un modelo de usuario:

\n\n
public class User\n{\n    public int Id { get; set; }\n    public string Name { get; set; }\n    public string Email { get; set; }\n    public int Age { get; set; }\n    public string Password { get; set; }\n    public string ConfirmPassword { get; set; }\n}
\n\n

Creemos un validador, heredando de AbstractValidator<User>:

\n\n
using FluentValidation;\n\npublic class UserValidator : AbstractValidator<User>\n{\n    public UserValidator()\n    {\n        RuleFor(user => user.Name)\n            .NotEmpty().WithMessage("El nombre es obligatorio")\n            .Length(2, 50).WithMessage("El nombre debe tener entre 2 y 50 caracteres");\n\n        RuleFor(user => user.Email)\n            .NotEmpty().WithMessage("El email es obligatorio")\n            .EmailAddress().WithMessage("Formato de email no válido");\n\n        RuleFor(user => user.Age)\n            .InclusiveBetween(18, 120).WithMessage("La edad debe estar entre 18 y 120 años");\n\n        RuleFor(user => user.Password)\n            .NotEmpty().WithMessage("La contraseña es obligatoria")\n            .MinimumLength(6).WithMessage("La contraseña debe tener al menos 6 caracteres");\n\n        RuleFor(user => user.ConfirmPassword)\n            .Equal(user => user.Password).WithMessage("Las contraseñas no coinciden");\n    }\n}
\n\n

Uso del validador:

\n\n
var validator = new UserValidator();\nvar user = new User\n{\n    Name = "A",\n    Email = "invalid-email",\n    Age = 15,\n    Password = "123",\n    ConfirmPassword = "456"\n};\n\nvar result = validator.Validate(user);\n\nif (!result.IsValid)\n{\n    foreach (var error in result.Errors)\n    {\n        Console.WriteLine($"Propiedad: {error.PropertyName}, Error: {error.ErrorMessage}");\n    }\n}
\n\n

Métodos principales de FluentValidation

\n\n

A continuación se presentan los métodos clave de la biblioteca con descripción detallada y ejemplos.

\n\n

1. RuleFor()

\n

Qué hace: Define una regla de validación para una propiedad específica del objeto. Este es el método principal con el que se comienza

Recommendations