Validando Lista de Objetos C# Asp.Net core com Fluent Validation
Validando Lista de Objetos C# Asp.Net core com Fluent Validation

Salve Dev, me chamo Jorel Magatti e sou Desenvolvedor c# .Net, aqui trago uma implementação muito simples de validação de objetos e de lista de objetos através da biblioteca FluentValidation. O objetivo deste artigo é mostrar uma forma de implementar o FluentValidation em uma API Asp.Net Core de uma forma limpa para o seu código.
Segue link oficial do FluentValidation:
Dando Inicio a API
Primeiramente Criei dois projetos em minha Solução chamada “FluientValidationAPI”, uma API Asp.Net Core chamada “FluientValidationAPI” (já com Swagger para facilitar os testes) e uma Biblioteca de Classe chamada “Validation.Model” ambas em .Net 5.

Na API “FluientValidationAPI”, eu adicionei uma controller chamada “ValidationController” e adicionei duas Actions do verbo POST uma para receber um objeto e valida-lo e outro para receber uma lista deste mesmo objeto e validar todos os objetos nesta lista. Nossa controller fica codificada da forma abaixo:


note que não foi implementado nenhuma chamada para outra camada ou módulo da aplicação para a validação dos dados. Isso porque a implementação desta validação será feita via Service na classe Startup da API, primeiro iremos trabalhar na Biblioteca de Classe “Validation.Model” para criar a classe “Usuario” que será nosso objeto de exemplo, e iremos criar as regras de validação deste objeto.
Dando Inicio a Model
Na Biblioteca de Classe “Validation.Model” iremos instalar o pacote FluentValidation.AspNetCore atualmente na versão 10.3.4, via NugetPackage. Após instalado o pacote. Na Biblioteca de Classe “Validation.Model” eu criei duas pasta, uma chamada “Model” onde vai conter as entidade (objetos para serem operadas pelas demais camadas) e uma pasta chamada “Validation” onde vai conter as regras de Validação do Objeto via FluentValidation.
Dentro da pasta “Model” criaremos a classe “Usuario” que seguirá com os parâmetros abaixo:

Note que no objeto “Usuario” não possui nenhuma regra de validação. O objetivo é este mesmo, os objetos de entidade ou model isoladas das sua regras de validação. Agora na pasta “Validation” iremos criar a classe “UsuarioValidation” que seguirá desta forma:

Note que a classe criada herda de “AbstractValidator<Usuario>” e usa uma referencia ao objeto que desejamos validar. E dentro da classe criada em seu construtor temos as Regras aplicadas via Linq, a biblioteca FluentValidation é muito prática e completa, com ela você consegue personalizar suas validações caso precise, assim como possui validações básica para uso direto como NotEmpty() ou NotNull() e toda validação é acompanhada de uma mensagem usando o método WithMessage(), note que dentro da RuleFor() temos uma referencia ao campo que desejamos implementar as validações correntes. Há muitas formas de validar os campos, o exemplo acima trabalharemos somente com as validações básicas, somente para mostrar sua utilização. Para mais validações segue abaixo link oficial da Biblioteca FluentValidation com modelos de validação:
Agora ainda dentro da pasta “Validation” criaremos uma Classe de Validação para uma lista de objetos do tipo “Usuario”, esta classe será chamada “ListaUsuarioValidation” segue abaixo:

Note que a classe “ListaUsuarioValidation” possui a mesma estrutura de herança da classe “UsuarioValidation” porem na referencia da herança sobre a classe de objeto que iremos validar esta uma lista deste objeto. E note que no construtor criamos uma regra apenas, feita para ser aplicada a todos os objetos da lista através do método RuleForEach() e utilizamos o SetValidator() para dizer qual classe de Validação queremos usar nos objetos da lista. Desta forma aplicamos validação em Lista de Objetos.
Aplicando as Validações Criadas
Agora vamos aplicar estas validações na API para que assim que o objeto chegar nas actions da controller, ele passe por esta validação e retorne as mensagens configuradas de acordo com a regra que não foi respeitada referente ao objeto validado.
Para isto aplicaremos na classe Startup da API, dentro do Método ConfigureServices(IServiceCollection services) adicionaremos uma referencia as validações criadas através do objeto service, o método segue abaixo:

Note que temos as referencias do Swagger na service, e abaixo temos a implementação services.AddMvc()… e em sua extensão temos o método AddFluentValidation() onde adicionamos uma referencia as classes de Validações que queremos aplicar, aqui será onde adicionaremos todas as referencias de validação que queremos aplicar em nossa API. Feito isso podemos testar sua aplicação enviando objetos json desrespeitando as regras criadas:

Ao tentar enviar uma parâmetro desrespeitando a regra criada ele retornar um BadRequest com a mensagem criada para a regra do parâmetro:

E em uma lista enviarei três objetos sendo que o segundo vai possuir um campo idade sem valor parametrizado:

o Retorno da Validação de Lista:

Note que na resposta da validação da lista, a mensagem de erro é acompanhada do índice do objeto que esta apresentando inconformidade com a validação.
Por fim, espero que tenha gostado. Esta é uma prática de validação muito boa para evitar que objetos inválidos cheguem as outras camadas de sua aplicação, causando possíveis erros.
Segue link deste projeto
Comentários
Postar um comentário