ASP .NET Core MVC - Tratamento de exceções - I

 Neste artigo veremos como realizar o tratamento de erros em aplicações ASP .NET Core MVC.

      

A recomendação da documentação da ASP .NET Core para configurar a sua aplicação para exibir uma página que mostra informações detalhadas sobre exceções é : usar a página de exceção do desenvolvedor.

Esta página é disponibilizada pelo pacote Microsoft.AspNetCore.Diagnostics, que está disponível no metapacote Microsoft.AspNetCore.App.

A seguir coloque a chamada para UseDeveloperExceptionPage na frente de qualquer middleware no qual você deseja capturar exceções, tais como app.UseMvc.

Para simular uma exceção coloque na frente da url base da aplicação o código : ?throw=true

Dessa forma ao criar uma nova aplicação ASP .NET Core MVC, o middleware ExceptionHandler já é fornecido por padrão. Com ele podemos capturar quaisquer exceções não tratadas dentro da nossa aplicação e permitir que o direcionamento para uma rota especificada.

Por exemplo, o seguinte método de manipulador de erro é fornecido no controlador Home:

[AllowAnonymous]
public IActionResult Error()
{
    return View(new ErrorViewModel
        { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}

Mas e os outros códigos de status de operações que não tiveram sucesso ?

Erros como 404, 400, 401, etc. não serão capturados por este middleware, pois nenhuma exceção foi lançada.

Para lidar com esses tipos de erros, podemos usar o middleware StatusCodePages, e, neste artigo veremos como configurar a aplicação MVC para manipular os dois tipos de exceções e os códigos de status que não são bem-sucedidos.

Recursos usados:

Criando o projeto no VS 2017

Vamos iniciar criando uma aplicação ASP .NET Core MVC usando o template padrão.

Abra o VS 2017 Community e crie um novo projeto ASP .NET Core usando o template Web Application(Model-View-Controller).

  • Create New Project;
  • Visual C# -> .NET Core -> ASP .NET Core Web Application;
  • Informe o nome AspCoreMvc_TrataExceptions

  • Clique em OK e a seguir selecione o template Web Application(Model-View-Controller) , marque ASP .NET Core 2.0 e clique em OK;

Ao clicar no botão OK teremos o projeto criado com a estrutura abaixo:

Vemos a estrutura do projeto contendo as referências  e as pastas Controllers, Models e Views bem como os arquivos Startup e appsettings.json.

Vamos usar esses recursos para criar nossa aplicação ASP .NET Core MVC.

 

Manipulando exceções não tratadas

Quando criamos uma aplicação ASP .NET Core MVC o template cria um projeto padrão contendo a classe Startup e o método Configure mostrado abaixo:

Observe a linha de código destacada : app.UseExceptionHandler("/Home/Error").

Esta instrução esta registrando o middleware ExceptionHandler e vai direcionar o usuário para a rota /Home/Error sempre que uma exceção não tratada ocorrer.

Vamos alterar esta linha de código para : app.UseExceptionHandler("/Error/500");

A seguir vamos incluir um novo controlador em nosso projeto na pasta Controllers chamado ErrosController que vai tratar todos os erros da nossa aplicação.

Clicando com o botão direito do mouse na pasta Controllers e acionando Add->Controller selecione o template MVC Controller Empty e informe o nome ErrosController.

A seguir inclua o código abaixo no controlador definindo o método Action Error500() :

Vamos entender este código:

Estamos  usando o atributo de roteamento :  [HttpGet("Error/500")] (Se preferir você pode usar o template route padrão)

A seguir estamos usando o recurso IExceptionHanderPathFeature para obter informações mais detalhes sobre o que ocorreu de errado em nossa aplicação.

Quando o middleware ExceptionHandler é executado, ele define um item na coleção Features para o request chamado IExceptionHandlerPathFeature. Este é um dos dois recursos adicionados, o outro é IExceptionHandlerFeature.

Ambos contêm uma propriedade chamada Error, que possui os detalhes da exceção. Mas o IExceptionHandlerPathFeature também contém o caminho a partir do qual a exceção foi lançada, assim usamos esse recurso para obter informações do caminho do erro também.

A seguir com a informação obtida, e, para tornar o exemplo mais simples, estamos atribuindo as informações da exceção obtida a duas ViewBag de forma a podermos exibí-las em uma view. Numa aplicação de produção o mais correto seria logar as informações dos erros e exibir uma mensagem mais amigável ao usuário final.

Uma implementação bem simples para a respectiva view Error500.cshtml e exibida a seguir:

Dessa forma, bem simples por sinal, podemos manipular qualquer exceção não tratada em nossa aplicação e a seguir exibir os detalhes da exceção lançada.

Na próxima parte do artigo veremos como tratar com problemas não baseados em exceções, como um 404 ou qualquer código de status que não seja de sucesso que nossa aplicação gerar.

"Jesus respondeu, e disse-lhe: Se alguém me ama, guardará a minha palavra, e meu Pai o amará, e viremos para ele, e faremos nele morada."
João 14:23

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti