HandleErrorAttribute – ASP.NET MVC


Pessoal,

Como realizar o handle de exceptions de suas actions presentes nos controles do ASP.NET MVC?

Podemos herdar o HandleErrorAttribute e criar nosso próprio atributo. E podemos então sobrepor o evento OnException e codificar o que devemos ou não fazer com a exceção que foi disparada.

Abaixo um exemplo de código onde faço a herança e implemento o evento. O seu conteúdo está usando o Enterprise Library para tomar outras ações como registrar log e informar ao usuário mensagens amigáveis e não de sistema. Outro post comentamos sobre o EL.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MensagemException;
using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling;

namespace ViewMvc
{
    public class ErroSistema : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            Exception erro = filterContext.Exception;
            Exception novoErro;
            bool rethrow = ExceptionPolicy.HandleException(erro, "Policy", out novoErro);

            base.OnException(filterContext);
        }
    }
}

Para utilizar o atributo basta ir à declaração da Action e colocar a declaração do atributo:

        [HttpPost]
        [ErroSistema]
        public ActionResult Novo(FormCollection colecao, Contato entidade)
        {
           // Aqui tem código...
           // ....
        }

Ou então se estiver usando o MVC 3 pode registrar esse atributo para toda aplicação devido aos Global Filters presente no seu Global.asax Exemplo:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    //filters.Add(new HandleErrorAttribute());
    filters.Add(new ErroSistema { View = "Error" });
}

Lembre-se: Sempre colocar o web.config para mostrar custom errors e não aquela página de erro tradicional do .net.

<customErrors mode="RemoteOnly" />
About these ads

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s