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" />