Validação de dados em C# (.NET): bibliotecas e abordagens

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

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

Recommendations