Je suggère la mise en œuvre d'une coutume HandleErrorAttribute action du filtre.
Voir ce lien pour plus de détails:
http://msdn.microsoft.com/en-us/library/dd410203%28v=vs.90%29.aspx
La configuration d'un HandleErrorAttribute action de filtre vous donne un contrôle complet sur les actions qui sont traitées par le filtre, et il est facile de mettre à niveau du contrôleur, ou même au niveau du site par la mise en place sur une base personnalisé contrôleur, et d'avoir tous vos contrôleurs de hériter du contrôleur de base.
Ai autre chose à faire avec cela, c'est que j'ai séparé HandleJsonErrorAttribute qui répond à des appels Ajax, en retournant une réponse Json, plutôt que la page personnalisée.
Mise à JOUR:
Par quelques questions ci-dessous, voici un exemple d'un HandleJsonErrorAttribute
que j'utilise:
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;
}
}
Et voici le jQuery que j'utilise pour gérer ces unhanded exceptions:
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
showPopdown($.parseJSON(jqXHR.responseText).message);
});
Ce qui permet à mon Ajax méthodes pour être très léger -- ils gérer le retour normal Json, et dans le cas d'une unhanded exception, un message w/ un code d'état d'erreur s'amalgament en Json et retourné.
Aussi, dans mon application, j'ai une coutume ServiceException
que je jette de services, et cela envoie le message à partir de la couche de service au lieu d'un message générique.