image

Access unlimited bootcamps and 650+ courses

50
%OFF
Article image
Marcio Andrade
Marcio Andrade15/12/2024 10:16
Share

FluentValidation no ASP.NET Core

    Quando se trata de validação de modelos e solicitações HTTP recebidas, não estamos todos inclinados para Data Anotations? Embora possa ser rápido configurar anotações de dados em seus Models, essa abordagem tem algumas desvantagens.

    É bom para pequenos projetos e POCs. Mas uma vez que você começa a aprender código limpo, ou começa a entender os princípios SOLID do design de aplicativos, você nunca ficaria tão feliz com as anotações de dados quanto antes. Não é uma boa abordagem combinar seus modelos e lógica de validação.

    O uso de anotações de dados vincula suas regras de validação às classes de modelo. Isso pode violar o princípio de separação de responsabilidades do SOLID, pois a lógica de validação é misturada com a lógica de domínio.

    Então, qual é a solução?

    FluentValidation é uma poderosa biblioteca de validação .NET de software livre que ajuda você a tornar suas validações limpas, fáceis de criar e manter. Ele ajuda você a criar regras de validação fortemente tipadas. Funciona até mesmo em modelos externos aos quais você não tem acesso. Com essa biblioteca, você pode separar as classes de modelo da lógica de validação como deveria ser. Isso não torna suas classes desordenadas como as anotações de dados. Além disso, um melhor controle da validação é algo que faz com que os desenvolvedores prefiram o FluentValidation.

    Nesta demonstração, aprenderemos sobre a validação manual usando o pacote FluentValidation.

    Nosso primeiro passo é instalar os pacotes NuGet FluentValidation necessários em seu projeto por meio do Console de Gerenciamento de Pacotes.

    Install-Package FluentValidation

    Install-Package FluentValidation.DependencyInjectionExtensions


    image

    Figura 1 – Package Manager Console

    Solicitação de registro de usuário

    Para a demonstração, usaremos o cenário em que nossa API é responsável por registrar novos usuários no sistema, expondo um endpoint da API POST. Aqui está a aparência da classe C#.

    Crie uma pasta Models e inclua uma classe UserRegistrationRequest com o seguinte código


    image

    Figura 2 – Criação da pasta Models e Classe UserRegistrationRequest

    Nosso objetivo final será validar essa classe de solicitação sempre que a API de registro for atingida. Por exemplo, precisamos garantir que o usuário tenha inserido um Nome e E-mail válido e assim por diante. Iremos desenvolver isso introduzindo vários recursos oferecidos pelo FluentValidation.

    image

    Figura 3 – Criação da pasta Validation e da classe UserRegistrationValidator

    Para organizar o nosso projeto criaremos uma pasta Validations e uma classe UserRegistrationValidator para configurar nossas validações.

    Deixe-me explicar o que cada regra valida pelo método RuleFor.

    1. Nome não deve estar vazio e ter um comprimento mínimo de cadeia de caracteres de 4.
    2. Sobrenome não deve estar vazio e deve ter um comprimento máximo de 10 caracteres.
    3. Validação de e-mail como vimos anteriormente.
    4. Isso garante que os campos e correspondam na solicitação de Senha e ConfirmaSenha

    É prático mostrar mensagens de validação personalizadas com base na propriedade. É bem simples com o FluentValidation. Vá para o validador que criamos e adicione uma extensão à regra associada à propriedade Email.WithMessage( ).


    Validadores integrados

    Existem vários validadores que você obtém por padrão com o FluentValidation. Usaremos alguns deles para escrever validações adicionais para as outras propriedades da classe.

    E aqui está a resposta do nosso ASP.NET Core Web API:

    {
    "type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "errors": {
      "Email": ["MailID é invalido! Favor verificar!"]
    }
    }
    

    Pode haver casos em que você deseja adicionar mais do que validação a uma propriedade específica. A regra tem duas dessas validações na propriedade. Não deve estar vazio e, ao mesmo tempo, o comprimento mínimo da propriedade deve ser de pelo menos 4 caracteres.

    RuleFor(x => x.Nome).NotEmpty().MinimumLength(4);
    

    Muito fácil e prático, não é mesmo? Espero que você tenha entendido e gostado deste guia simples. Tenho certeza de que você passará a usar esta poderosa biblioteca a partir de hoje. Para saber mais, consulte a documentação. vou deixar os links nas referências.

    Sucessos e bons códigos.

    REFERÊNCIAS:

    Creating your first validator — FluentValidation documentation

    Built-in Validators — FluentValidation documentation

    Share
    Comments (0)