Validação de dados em C# (.NET): a poderosa ferramenta FluentValidation
A validação de dados é um dos aspectos-chave do desenvolvimento de aplicações seguras e confiáveis em C# (.NET). Independentemente de você estar criando uma Web API em ASP.NET Core, uma aplicação desktop em WPF ou um utilitário de console, a verificação dos dados de entrada ajuda a evitar erros, injeções SQL e mau funcionamento do sistema. Neste artigo, abordaremos detalhadamente a biblioteca FluentValidation — uma ferramenta moderna, flexível e amplamente utilizada para validação no ecossistema .NET.
O que é FluentValidation e por que usá-lo?
FluentValidation é uma biblioteca open-source para .NET que permite descrever regras de validação de objetos usando uma interface fluente (encadeamento de chamadas de métodos). Ao contrário dos atributos embutidos DataAnnotations, o FluentValidation:
- Separa a lógica de validação do modelo de dados — as regras são colocadas em classes validadoras separadas.
- Suporta cenários complexos — verificações condicionais, regras personalizadas, validações entre propriedades.
- Integra-se com ASP.NET Core — valida automaticamente modelos nos controladores.
- Facilita os testes — os validadores podem ser facilmente isolados e cobertos por testes unitários.
Instalação e configuração
Para começar, instale o pacote via NuGet Package Manager ou .NET CLI:
dotnet add package FluentValidationSe você estiver usando ASP.NET Core, adicione em Program.cs (ou Startup.cs) o registro dos validadores:
builder.Services.AddValidatorsFromAssemblyContaining<MyValidator>();Criando um validador simples
Suponha que temos um modelo de usuário:
public class User{ public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public int Age { get; set; }}Vamos criar um validador que herda de AbstractValidator<User>:
using FluentValidation;
public class UserValidator : AbstractValidator<User>{ public UserValidator() { RuleFor(user => user.Name) .NotEmpty().WithMessage("O nome é obrigatório") .Length(2, 50).WithMessage("O nome deve ter entre 2 e 50 caracteres");
RuleFor(user => user.Email) .NotEmpty().WithMessage("O email é obrigatório") .EmailAddress().WithMessage("Formato de email inválido");
RuleFor(user => user.Age) .InclusiveBetween(18, 120).WithMessage("A idade deve estar entre 18 e 120 anos"); }}Agora podemos executar a validação:
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($"Erro em {error.PropertyName}: {error.ErrorMessage}"); }}Recursos avançados
1. Regras personalizadas (Custom validators)
Você pode escrever sua própria lógica de validação usando o método Must ou criar um método separado:
RuleFor(user => user.Name) .Must(name => !string.IsNullOrEmpty(name) && name.All(char.IsLetter)) .WithMessage("O nome deve conter apenas letras");2. Validação condicional
Valide propriedades apenas quando certas condições forem atendidas:
RuleFor(user => user.Email) .NotEmpty().When(user => user.Age > 18) .WithMessage("Para usuários adultos, o email é obrigatório");3. Validação entre propriedades
Compare valores de diferentes propriedades:
RuleFor(user => user.Password) .Equal(user => user.ConfirmPa Também na biblioteca
Agendador de Tarefas em Go (Golang): cron, gocron e robfig/cron
Media3 / ExoPlayer para Kotlin: guia completo com exemplos práticos
Envio de email em Kotlin: bibliotecas, exemplos e configuração SMTP
fx para Go: guia completo com exemplos práticos
Validação de dados em C++: bibliotecas, métodos e exemplos de código