Validação de dados com o Fluent Validation no .NET 6.0

Fluent Validation é um nuget package utilizado para validações de dados de forma simples e rápida para desenvolvedores .NET, além de contar com a utilização de expressões lambda para construir regras de validações, e com retorno de mensagem de erro padrão para cada propriedade das entidades.

O Fluent Validation trabalha com o conceito de Fail Fast, que quanto mais rápido você falhar, mais rápido você vai saber o que precisa ser corrigido, com isso devemos notificar a operação o mais rápido possível quando um erro ocorrer. Para mais detalhes sobre esse assunto, recomendo a leitura do artigo do Vladimir Khorikov.

Outros benefícios do Fluent Validation são:

  • Facilidade na utilização e criação de regras.
  • Centralização das regras de negócio.
  • Geração de notificação ao invés de erros (exceptions).
  • Velocidade de execução (As regras são objetos imutáveis, o que significa que você pode criá-las uma vez e armazená-las em cache).
  • Teste de unidade mais eficiente (Regras de validação são muito fáceis de testar).

Mais detalhes você encontra na documentação oficial: https://docs.fluentvalidation.net

Neste artigo, vamos nos concentrar na configuração e construção de regras de validação em uma API em .NET 6.0.

Pré-requisitos

API

Na classe program.cs da API, configure conforme o código abaixo:

O método AddFluentValidation() é uma extensão criada para centralizar o padrão de validações e configurações do Fluent Validation, onde:

  • RegisterValidatorsFromAssemblyContaining: Registra todas as classes de validações com base no tipo.
  • AutomaticValidationEnabled: Habilita ou desabilita a validação automática. Neste exemplo deixaremos desabilitado.
  • ValidatorOptions.LanguageManager.Culture: Configura a tradução padrão das mensagens de validação para pt-BR.

O método GetErrors() é utilizado para capturar as mensagens da validação e retornar como um objeto de notificação:

Em seguida, é necessário criar as propriedades do objeto de entrada ClientViewModel e as validações em ClientViewModelValidator, que contém as regras necessárias para registrar um novo cliente:

E por fim, é preciso configurar a chamada da validação em ClientController, onde é necessário registrar a injeção de dependência IValidator e utilizar o método ValidateAsync() para realizar a validação do objeto:

Testando

Para realizar os testes, execute o endpoint POST /client no Swagger e deixe o campo “name” como vazio ou null e clique em Execute:

Como resultado, é exibido um BadRequest informando as mensagens de validações escritas na classe ClientViewModelValidator:

Finalizando

A utilização da biblioteca Fluent Validation é ideal para separar a lógica de validação das classes do modelo. Ele também fornece uma documentação rica e de fácil de integração, além de suportar injeção de dependência para injetar validadores ou outros componentes para ter uma validação completa e centralizada.

Os detalhes completos deste exemplo você encontra no meu GitHub: https://github.com/hgmauri/sample-fluentvalidation

Deixe uma resposta