Validação de dados em C# (.NET): guia completo com exemplos
A validação de dados é um dos aspectos-chave do desenvolvimento de aplicações confiáveis em C# no ecossistema .NET. Ela garante que os dados recebidos estejam em conformidade com as regras definidas, prevenindo erros, vulnerabilidades e estados incorretos do sistema. Neste artigo, abordaremos detalhadamente as principais bibliotecas e ferramentas para validação no .NET, incluindo mecanismos nativos e soluções de terceiros populares.
Por que a validação de dados é importante?
Sem validação, a aplicação pode receber:
- Tipos de dados incorretos (por exemplo, uma string em vez de um número).
- Valores fora dos intervalos permitidos (idade negativa, e-mail inexistente).
- Injeções SQL, ataques XSS e outras ameaças de segurança.
- Violação da lógica de negócios (pedido sem itens, nome de usuário vazio).
O uso de abordagens estruturadas para validação torna o código mais limpo, testável e seguro.
1. Validação nativa: Data Annotations (System.ComponentModel.DataAnnotations)
A maneira mais simples e comum é usar atributos do namespace System.ComponentModel.DataAnnotations. Este método é ideal para modelos em ASP.NET Core MVC, Web API e Entity Framework.
Exemplo de modelo com atributos:
using System.ComponentModel.DataAnnotations;
public class User{ [Required(ErrorMessage = "Nome é obrigatório")] [StringLength(50, MinimumLength = 2, ErrorMessage = "O nome deve ter entre 2 e 50 caracteres")] public string Name { get; set; }
[Required] [EmailAddress(ErrorMessage = "E-mail inválido")] public string Email { get; set; }
[Range(1, 120, ErrorMessage = "A idade deve estar entre 1 e 120")] public int Age { get; set; }
[Phone(ErrorMessage = "Número de telefone inválido")] public string Phone { get; set; }}Validação programática do modelo:
var user = new User { Name = "A", Email = "invalid", Age = 200 };var context = new ValidationContext(user);var results = new List<ValidationResult>();
bool isValid = Validator.TryValidateObject(user, context, results, true);
if (!isValid){ foreach (var error in results) { Console.WriteLine(error.ErrorMessage); }}Vantagens: simplicidade, suporte nativo no ASP.NET Core, validação automática no nível dos controladores.
Desvantagens: flexibilidade limitada, atributos rigidamente vinculados ao modelo, difícil implementar regras de negócio complexas.
2. FluentValidation — validação flexível e expressiva
A biblioteca FluentValidation é a ferramenta de terceiros mais popular para validação no .NET. Ela permite extrair as regras de validação para classes separadas, suporta encadeamento de chamadas, mensagens personalizadas e condições complexas.
Instalação via NuGet: Install-Package FluentValidation
Exemplo de validador:
using FluentValidation;
public class UserValidator : AbstractValidator<User>{ public UserValidator() { RuleFor(u => u.Name) .NotEmpty().WithMessage("O nome não pode estar vazio") .Length(2, 50).WithMessage("O nome deve ter entre 2 e 50 caracteres");
RuleFor(u => u.Email) .NotEmpty() .EmailAddress().WithMessage("Formato de e-mail inválido");
RuleFor(u => u.Age) .InclusiveBetween(1, 120).WithMessage("Idade fora do intervalo");
// Regra personalizada RuleFor(u => u.Phone) .Matches(@"^\\+?[1-9]\\d{1,14}$").When(u => !string.IsNullOrEmpty(u.Phone)) .WithMessage("Número de telefone no formato internacional"); }}Uso
Também na biblioteca
Geração de PDF em C++: visão geral das bibliotecas e exemplos de código
Geração de relatórios PDF em Swift para iOS e macOS com PDFKit e Core Graphics
Cache em Go (Golang): Redis e ferramentas alternativas
Frameworks CLI para Kotlin: Clikt, kotlinx-cli, picocli — visão geral e comparação
Internacionalização (i18n) em JavaScript (Node.js): biblioteca i18next