Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    • Por que escalar escrita é tão mais difícil do que escalar leitura?
    • MongoDB Analyzer para .NET: Visualize e otimize suas consultas de forma simples
    • Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Asp.net»C#»Usando o FluentValidation no .NET Core

    Usando o FluentValidation no .NET Core

    Jhonathan SoaresBy Jhonathan Soares14 de novembro de 20182 Mins Read C#
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    Às vezes, existem muitas regras de validação em nossos métodos, como o nome não pode ser nulo, a idade deve ser maior que 18, etc., e como de costume, podemos escrever algum código para definir essas regras:

         static void Main(string[] args)  
        {  
            var addCusDto = new AddCustomerDto();  
            AddCustomer(addCusDto);  
            Console.ReadKey();  
        }  
          
        static void AddCustomer(AddCustomerDto dto)  
        {  
            if (string.IsNullOrWhiteSpace(dto.Name))  
            {  
                Console.WriteLine($"name cannot be null");  
                return;  
            }  
          
            if (string.IsNullOrWhiteSpace(dto.Phone))  
            {  
                Console.WriteLine($"phone cannot be null");  
                return;  
            }  
          
            if (dto.Other <= 0)  
            {  
                Console.WriteLine($"other must great than 0");  
                return;  
            }   
            //save code ...  
        }  
    
    No entanto, este caminho parece não ser muito fácil de entender e/ou escrever. Aqui, apresentarei uma pequena biblioteca de validação chamada FluentValidation, que usa uma interface fluente e expressões lambda para criar as regras de validação.
    Você pode seguir este link para mais informações: https://fluentvalidation.net/
    Vamos dar uma olhada em como usar essa biblioteca. Antes da próxima seção, precisamos instalar o FluentValidation via NuGet.
    Passo 1
    Criando o validador.
    Precisamos criar uma classe que herda de AbstractValidator <T>, onde T é o tipo de classe que você deseja validar. Para o exemplo de fundo, podemos criar o seguinte validador:
         public class AddCustomerDtoValidator : AbstractValidator<AddCustomerDto>  
        {  
            public AddCustomerDtoValidator()  
            {  
                RuleFor(x => x.Name).NotEmpty().WithMessage("name cannot be null");  
                RuleFor(x => x.Phone).NotEmpty();  
                RuleFor(x => x.Other).GreaterThan(0).WithMessage("other must be great than 0");  
            }  
        }  
    
    O que esse validador faz?
    1. A propriedade Name não está vazia. Se esta propriedade estiver vazia, a mensagem de erro será “nome não pode ser nulo”.
    2. A propriedade Phone não está vazia. Se esta propriedade estiver vazia, a mensagem de erro será o valor padrão.
    3. A propriedade Other deve ser maior que 0. Se essa propriedade não for maior que 0, a mensagem de erro será o valor padrão.
    Passo 2
    Usando o validador:
         static void AddCustomerWithFluentValidation(AddCustomerDto dto)  
        {  
            var validator = new AddCustomerDtoValidator();  
            var validRes = validator.Validate(dto);  
            if (!validRes.IsValid)  
            {  
                //first error message  
                Console.WriteLine(validRes.Errors.FirstOrDefault());  
                //Console.WriteLine(validRes.Errors.FirstOrDefault().ErrorMessage);  
                ////all error messages  
                //Console.WriteLine(validRes.ToString(","));  
                //Console.WriteLine(string.Join(",", validRes.Errors.Select(x => x.ErrorMessage)));  
                //Console.WriteLine(string.Join(",", validRes.Errors));  
            }  
          
            //save code ...  
        }  
    
    Como você pode ver, acabamos de criar uma instância do validador e chamamos o método de validação passando o objeto dto que queremos validar.
    O método Validate retorna um objeto ValidationResult. Ele contém duas propriedades, uma é IsValid que diz se a validação foi bem-sucedida ou não, enquanto a outra é Erros, que contém os detalhes sobre quaisquer falhas de validação.
    O exemplo acima mostra como obter a primeira mensagem de erro e todas as mensagens de erro. Você pode retornar a (s) mensagem (s) com base em sua necessidade. Nós só precisamos de dois passos para usar esta biblioteca. 
    Existem muitos recursos úteis do FluentValidation, como validadores encadeados:
         RuleFor(x => x.Name)
         .NotEmpty()
         .NotEqual("catcher")
         .WithMessage("name cannot be null");  
    
    Assim, podemos combinar muitos validadores para uma propriedade ou um conjunto delas.
    Um grande abraço a todos!
    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    O que é a Ecma e qual é sua relação com C#?

    C# Post do Leitor 29 de julho de 20247 Mins Read

    UUID vs ULID: comparação e exemplos em C#

    C# 19 de junho de 20245 Mins Read

    Entendendo o ObjectId no MongoDB

    C# NoSql 25 de maio de 20246 Mins Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 25mil outros assinantes
    Posts recentes
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    Categorias
    • Arquitetura (14)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (90)
      • NoSql (58)
      • Sql (38)
    • Boas práticas (29)
      • Gestão & Produtividade (1)
      • Metodologias Ágeis (6)
    • Cursos (52)
    • Dicas (105)
    • Front-End (92)
    • IA (1)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Cursos
    12 de fevereiro de 20166 Mins Read

    1000 livros gratuitos sobre programação!

    Olha que dica bacana! A pagina só com livros sobre programação é mantida no GitHub…

    30 APIs Gratuitas para desenvolvedores

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile