Neste artigo vou apresentar uma maneira de tratar exceções em uma API ASP.NET Core utilizando o Middleware de Exception Handler.
Como funciona
Na classe Startup, mais especificamente no método Configure utilizando a interface IApplicationBuilder, é possível configurar um Exception Handler, que atuará como um Middleware e permitirá manipular a resposta que será retornada pela API.
Logo abaixo mostrarei o passo a passo para definir e utilizar um Exception Handler.
Criando o Controller e Action
O primeiro passo é definir uma rota para a Action que vai ser executada após a exceção acontecer. Geralmente se cria um Controller para isso, e é preciso ignorar a Action para que o Swagger funcione corretamente.
Na imagem abaixo é mostrado o código do Controller e Action a serem utilizados. Note que utilizo injeção de dependência para obter IWebHostEnvironment e poder controlar as informações retornadas baseado no ambiente. Cada caso é um caso, então dependendo do seu uso você poderá realizar outras operações, como Logging.
Além disso, utilizo o atributo ApiExplorerSettings junto com a propriedade IgnoreApi para que a Action seja ignorada pelo Swagger. Já o atributo Route é utilizado para definir a rota da Action de erro.
Note o retorno Problem. Ele resulta em um objeto de tipo ProblemDetails, com código 500 para o usuário, junto com detalhes como Type (tipo do problema), Detail (detalhes do problema) e Title (título do problema). Ele segue um padrão de informações que visa definir os dados que representam detalhes de problemas.
Além disso, note que é possível checar informações sobre a exceção, permitindo realizar outra operação caso ela seja de algum tipo específico.
Configurando na classe Startup
Em seguida, na classe Startup e método Configure, basta adicionar IApplicationBuilder.UseExceptionHandler, passando a rota da Action a ser chamada em caso de exceção.
app.UseExceptionHandler("/error");
Lembrar de remover outros Exception Handlers, como o app.UseDeveloperExceptionPage(); que já vem adicionado por padrão.
Testando o Exception Handler
Adiciono o código abaixo para provocar um erro bem conhecido por nós desenvolvedores, para então verificar o retorno.
throw new NullReferenceException();
Executando uma Action que conheça essa linha em seu início, o objeto abaixo é retornado. Utilizei a Action Get do Controller que é criado por padrão no projeto, chamado WeatherForecastController.
Lembrando que você pode alterar o conteúdo do objeto dependendo do seu ambiente de execução.
Quer alavancar sua carreira como Desenvolvedor(a) .NET?
Opa, aqui é o Luis Felipe (LuisDev), criador do blog LuisDev.
Além de Desenvolvedor .NET Sênior, eu sou instrutor de mais de 700 alunos e também tenho dezenas de mentorados.
Conheça o com mais de 800 video-aulas sobre C# e desenvolvimento de APIs com ASP NET Core, Microsserviços com ASP NET Core, Arquitetura de Software, Computação em Nuvem, SQL, HTML, CSS e JavaScript, JavaScript Intermediário, TypeScript, Desenvolvimento Front-End com Angular, e Desenvolvimento Front-end com React. Diversos mini-cursos disponíveis aos alunos e atualizações gratuitas.
Suporte dedicado, e comunidade de centenas de alunos.
Completo e online, destinado a profissionais que querem dar seu próximo passo em sua carreira como desenvolvedores .NET.
Clique aqui para ter mais informações e garantir sua vaga
Espero que o artigo possa ter contribuído em seu conhecimento, até o próximo!
Dev .NET Sênior com experiências para Irlanda e Estados Unidos, 2x Microsoft MVP, 9x Microsoft Certified, MBA em Arquitetura de Soluções, Fundador e Instrutor LuisDev Treinamentos,