Sugeriría implementar un filtro de acción HandleErrorAttribute personalizado.
Vea este enlace para más detalles:
http://msdn.microsoft.com/en-us/library/dd410203%28v=vs.90%29.aspx
Configuración de un filtro de acción HandleErrorAttribute le da un control completo sobre qué acciones son manejados por el filtro, y es fácil de configurar a nivel del controlador, o incluso en el nivel del sitio configurándolo en un controlador base personalizado y teniendo todos sus controladores heredados del controlador base.
Algo más que hago con esto, es que tengo una HandleJsonErrorAttribute separada que responde a las llamadas Ajax devolviendo una respuesta Json, en lugar de la página personalizada.
ACTUALIZACIÓN:
por algunas preguntas a continuación, aquí es un ejemplo de un HandleJsonErrorAttribute
que utilizo:
public class HandleJsonErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
var serviceException = filterContext.Exception as ServiceException;
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
filterContext.Result = new JsonResult { Data = new { message = serviceException == null ? "There was a problem with that request." : serviceException.Message } };
filterContext.ExceptionHandled = true;
}
}
Y aquí es el jQuery que utilizo para manejar estas excepciones unhanded:
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
showPopdown($.parseJSON(jqXHR.responseText).message);
});
Esto permite que mis métodos Ajax sean muy livianos, solo manejan el retorno normal de Json, y en el caso de una excepción sin manos, un mensaje con un código de estado de error se envuelve en Json y se devuelve.
Además, en mi implementación, tengo un ServiceException
personalizado que arrojo de los servicios, y esto envía el mensaje de la capa de servicio en lugar de un mensaje genérico.
Podría dar un ejemplo de cómo habría que manejar estas llamadas error de Ajax por el uso de 'HandleJsonErrorAttribute'? – AdrianoRR
Sí, también estoy interesado en HandleJsonErrorAttribute. ¿Me puede dar más información y/o un ejemplo? –
¡Buen código! Esto funciona para mi. ¡Gracias! Solo cambié StatusCode a "Ok" y manejo la excepción en mi propio código. Para cualquiera que esté buscando cómo usar: simplemente ponga el atributo en Acción (como: [HandleJsonErrorAttribute] public JsonResult ActionNameX (object someArgs) {...} –