Tratamento de erros com ASP NET MVC 2

Uma das necessidades de um sistema é a maneira que fazemos o tratamento de erros, e com ASP NET MVC 2 esse tratamento fica ainda mas fácil. Na versão 2 do ASP NET MVC foi adicionado Filter Interceptor chamado HandleError, somente adicionando esse atributo em nosso controller, métodos já podemos tratar nossos erros.

Mas como configurar o HandleError?

A primeira coisa que devemos fazer é configurar o web.config, basta ativar a propriedade CustomErrors, e também já configuramos o erro 404, conforme abaixo:

[sourcecode language=”xml”]
<customErrors mode="On">
<error statusCode="404" redirect="NotFound" />
</customErrors>
[/sourcecode]

Agora vamos criar um classe que servirá como base para a criação dos nosso controllers, também ja estou gravando um LOG dos erros usando o LOG4NET, veja abaixo o código:

[sourcecode language=”csharp”]
public class BaseController : Controller
{
private static ILog log = LogManager.GetLogger("MrTaylor Log");

protected override void OnException(ExceptionContext filterContext)
{
log.Debug(filterContext.Exception);
base.OnException(filterContext);
}
}
[/sourcecode]

Em todos os outros controllers vamos herdar de BaseController e adicionar o atributo HandlerError, veja o exemplo abaixo:

[sourcecode language=”csharp”]
[HandleError]
public class PessoaController : BaseController
{
…..
}
[/sourcecode]

Quando ocorrer algum erro em nossa aplicação automaticamente será acionado o método OnException da nossa classe BaseController, a página que será chamada está em View -> Shared -> Error.aspx

[sourcecode language=”html”]
<h2>Desculpe, ocorreu um erro ao processar o pedido!</h2>
<div class="erro">
<b>Controller:</b><%= this.ViewData.Model.ControllerName %><br />
<b>Action:</b><%= this.ViewData.Model.ActionName %><br />
<b>Mensagem da exceção:</b> <%= this.ViewData.Model.Exception.Message %>
</div>
[/sourcecode]

Veja a página gerada abaixo:

Veja o LOG gravado no arquivo

Falei que era fácil!

Qualquer dúvida, opinião, reclamação mande seu comentário!

Um Abraço!

Sobre Leandro Prado

Leandro Silveira Prado é Premier Field Engineer na Microsoft especializado em Application Lifecycle Management.