Validación de datos en C# (.NET) con FluentValidation: guía completa

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

Validación de datos en C# (.NET): la potente herramienta FluentValidation



La validación de datos es uno de los aspectos clave en el desarrollo de aplicaciones seguras y confiables en C# (.NET). Ya sea que esté creando una API web en ASP.NET Core, una aplicación de escritorio en WPF o una utilidad de consola, la verificación de los datos de entrada ayuda a evitar errores, inyecciones SQL y un funcionamiento incorrecto del sistema. En este artículo, analizaremos en detalle la librería FluentValidation: una herramienta moderna, flexible y ampliamente utilizada para la validación en el ecosistema .NET.



¿Qué es FluentValidation y por qué es necesario?



FluentValidation es una librería de código abierto para .NET que permite describir reglas de validación de objetos mediante una interfaz fluida (encadenamiento de llamadas a métodos). A diferencia de los atributos integrados DataAnnotations, FluentValidation:



  • Separa la lógica de validación del modelo de datos — las reglas se colocan en clases validadoras separadas.
  • Admite escenarios complejos — validaciones condicionales, reglas personalizadas, validaciones entre propiedades.
  • Se integra con ASP.NET Core — verifica automáticamente los modelos en los controladores.
  • Facilita las pruebas — los validadores se pueden aislar y cubrir fácilmente con pruebas unitarias.


Instalación y configuración



Para comenzar, instale el paquete a través del Administrador de paquetes NuGet o la CLI de .NET:



dotnet add package FluentValidation


Si usa ASP.NET Core, agregue en Program.cs (o Startup.cs) el registro de validadores:



builder.Services.AddValidatorsFromAssemblyContaining<MyValidator>();


Creación de un validador simple



Supongamos que tenemos un modelo de usuario:



public class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }    public int Age { get; set; }}


Creemos un validador que herede de AbstractValidator<User>:



using FluentValidation;

public class UserValidator : AbstractValidator<User>{ public UserValidator() { RuleFor(user => user.Name) .NotEmpty().WithMessage("El nombre es obligatorio") .Length(2, 50).WithMessage("El nombre debe tener entre 2 y 50 caracteres");

RuleFor(user => user.Email) .NotEmpty().WithMessage("El email es obligatorio") .EmailAddress().WithMessage("Formato de email no válido");

RuleFor(user => user.Age) .InclusiveBetween(18, 120).WithMessage("La edad debe estar entre 18 y 120 años"); }}


Ahora podemos ejecutar la validación:



var validator = new UserValidator();var user = new User { Name = "A", Email = "invalid", Age = 15 };var result = validator.Validate(user);

if (!result.IsValid){ foreach (var error in result.Errors) { Console.WriteLine($"Error en {error.PropertyName}: {error.ErrorMessage}"); }}


Funcionalidades avanzadas



1. Reglas personalizadas (Custom validators)



Puede escribir su propia lógica de validación usando el método Must o creando un método separado:



RuleFor(user => user.Name)    .Must(name => !string.IsNullOrEmpty(name) && name.All(char.IsLetter))    .WithMessage("El nombre debe contener solo letras");


2. Validación condicional



Valide propiedades solo cuando se cumplan ciertas condiciones:



RuleFor(user => user.Email)    .NotEmpty().When(user => user.Age > 18)    .WithMessage("Para usuarios adultos, el email es obligatorio");


3. Validación entre propiedades



Compare valores de diferentes propiedades:



RuleFor(user => user.Password)    .Equal(user => user.ConfirmPa                    

Recommendations