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

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

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 ser null ou 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.AspNetCore


Exemplo 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

Recommendations