Quando as exceções não são tratadas e recuperadas internamente em nossa aplicação o ASP.NET ainda fornece maneiras para logarmos, liberar recursos e fazer qualquer outro processamento necessário antes de mostrarmos a exceção para o usuários.
Para isto é possível utilizar dos eventos Page_Error e Application_Error, um programado na página e o segundo no global.asax. Dentro destes eventos podemos então chamar o método Server.GetLastError() para obtermos a exception que está ocasionando o erro e podemos também, se só tivermos que logar ou fazer outra manipulação, chamar o método Server.ClearError(), para que o erro não continue sendo propagado.
Na imagem 1, estamos programando o evento da página para adicionar informações ao trace, que permitirá a análise da requisição.
Imagem 1 - Programando o Page_Error
Para programar o evento Page_Error, somente criamos o método com o nome, parâmetros e retorno acima e este foi chamado devido ao atributo AutoEventWireup da diretiva @Page estar definido para true, conforme Imagem 2.
Imagem 2 - Atributo AutoEventWireup
No global.asax podemos programar o método Application_Error que deve ser utilizado para logar, armazenar informações, enviar notificações e outros procedimentos sobre o erro. Veja na Imagem 3.
Imagem 3 - Application_Error
Na página é possível também configurar o atributo ErrorPage, para definir qual página será executada ao acontecer um erro não tratado.
Configurando o Web.config
No web.config, no elemento customErros, podemos configurar qual a página de erro padrão e página de erros para os diferentes códigos de errors HTTP. O atributo mode do elemento customErrors pode ter os seguintes valores:
- On
Exceções não manipuladas redirecionarão o usuário a página configurada no atributo defaultRedirect. Este é utilizado mais frequentemente em produção. - Off
Usuários visualizarão as informações de exceção da página padrão de erro padrão do ASP.NET, esta mostra várias informações sobre o erro. Utilizado frequentemente no desenvolvimento. - RemoteOnly
Usuário acessando a máquina usando localhost na url visualizarão o erro padrão do ASP.NET, enquanto usuários remotos serão redirecionados para a página configurada no atributo defaultRedirect
Veja um exemplo de configuração na Imagem 4
Imagem 4 – customErrors no web.config
Referências:
http://msdn2.microsoft.com/en-us/library/ms954599.aspx