Validação de dados em C# (.NET): guia completo
A validação de dados é um dos aspectos-chave do desenvolvimento de aplicações robustas e seguras em C#. Ela permite garantir que os dados de entrada correspondam ao formato esperado, às faixas de valores e às regras de negócio. No ecossistema .NET, existem várias ferramentas poderosas para validação: desde os atributos internos System.ComponentModel.DataAnnotations até a biblioteca flexível FluentValidation. Neste artigo, abordaremos detalhadamente ambas as abordagens com exemplos de código.
1. Validação interna via DataAnnotations
O namespace System.ComponentModel.DataAnnotations fornece um conjunto de atributos que podem ser aplicados às propriedades das classes de modelo. Esta é a forma mais simples e rápida de validação, especialmente em ASP.NET Core MVC e Blazor.
Atributos principais:
[Required]— o valor não pode sernullou vazio.[StringLength(max)]— limitação do comprimento da string.[Range(min, max)]— verificação de faixas numéricas.[RegularExpression(pattern)]— verificação por expressão regular.[EmailAddress]— validação de email.[Compare("OtherProperty")]— comparação de duas propriedades (ex.: senha e confirmação).
Exemplo de modelo com atributos:
public class UserRegistrationDto{ [Required(ErrorMessage = "Nome é obrigatório")] [StringLength(50, MinimumLength = 2, ErrorMessage = "O nome deve conter de 2 a 50 caracteres")] public string FirstName { get; set; }
[Required(ErrorMessage = "Email é obrigatório")] [EmailAddress(ErrorMessage = "Formato de email inválido")] public string Email { get; set; }
[Required] [Range(18, 120, ErrorMessage = "A idade deve estar entre 18 e 120")] public int Age { get; set; }
[Required] [DataType(DataType.Password)] public string Password { get; set; }
[Compare("Password", ErrorMessage = "As senhas não coincidem")] public string ConfirmPassword { get; set; }}Verificação manual do modelo:
public static bool ValidateUser(UserRegistrationDto user, out List<ValidationResult> errors){ var context = new ValidationContext(user); errors = new List<ValidationResult>(); return Validator.TryValidateObject(user, context, errors, validateAllProperties: true);}
// Uso:var user = new UserRegistrationDto { FirstName = "A", Email = "invalid", Age = 15 };if (!ValidateUser(user, out var errors)){ foreach (var error in errors) Console.WriteLine(error.ErrorMessage);}2. FluentValidation — validação avançada
A biblioteca FluentValidation (NuGet: FluentValidation.AspNetCore) oferece uma forma mais flexível e legível de descrever regras de validação através de uma interface fluente. Ela é ideal para cenários complexos: validação condicional, mensagens personalizadas, cadeias de regras e integração com contêineres DI.
Instalação via NuGet:
dotnet add package FluentValidation.AspNetCoreExemplo de validador:
using FluentValidation;
public class UserValidator : AbstractValidator<UserRegistrationDto>{ public UserValidator() { RuleFor(u => u.FirstName) .NotEmpty().WithMessage("O nome não pode estar vazio") .Length(2, 50).WithMessage("O nome deve conter de 2 a 50 caracteres");
RuleFor(u => u.Email) .NotEmpty().WithMessage("Email é obrigatório") .EmailAddress().WithMessage("Formato de email inválido");
RuleFor(u => u.Age) .InclusiveBetween(18, 120).WithMessage("A idade deve estar entre Também na biblioteca
Rate Limiting em Go: guia para limitar a velocidade de requisições
Trabalhando com CSV em Swift (iOS/macOS): biblioteca SwiftCSV e fundamentos de parsing
Testes em Java: principais frameworks e ferramentas
Bibliotecas WebSocket Swift: Starscream e URLSessionWebSocketTask
Trabalhando com Markdown em Swift (iOS/macOS): bibliotecas Down, SwiftMarkdown