Je suis en train de revenir à une vue qui n'a pas un problème de redirection de l'utilisateur sur la base de certaines erreurs qui pourraient se produire à partir de mon application, je veux traiter les erreurs de + log dans mon contrôleur de base, je ne veux pas l'erreur de se propager jusqu'à mon Global.asax - Appliacation_Error() la méthode que je veux cette méthode pour traiter toute autre erreur, à l'intérieur de mon appli par exemple, l'utilisateur entre dans un bidon URL, quelqu'un a trouvé un moyen de contourner cela?
NOTE: j'ai laissé mon code commenté que j'avais une solution de contournement pour certaines questions, ce qui montre aussi j'ai plusieurs exceptions possibles poignée...
EDIT: Si j'ai un problème RedirectToAction dans ce OnException remplacer tout fonctionne comme prévu, mais je ne veux le retour de la vue et pas de redirection...
Mon contrôleur de base de la méthode est:
protected override void OnException(ExceptionContext filterContext)
{
//dont interfere if the exception is already handled
if (filterContext.ExceptionHandled)
return;
//let the next request know what went wrong
filterContext.Controller.TempData["exception"] = filterContext.Exception;
//logg exception
_logging.Error(User.Identity.Name, ExceptionHelper.BuildWebExceptionMessage(filterContext.Exception));
//set up redirect to my global error handler
//if (filterContext.Exception.GetType() == typeof(NoAccessException))
// filterContext.Result = View(new RouteValueDictionary
// (new { area = "", controller = "Error", action = "PublicError" }));
//else {
//Only return view, no need for redirection
filterContext.Result = View(new RouteValueDictionary
(new { area = "", controller = "Error", action = "NoAccess" }));
//}
//advise subsequent exception filters not to interfere and stop
// asp.net from showing yellow screen of death
filterContext.ExceptionHandled = true;
//erase any output already generated
filterContext.HttpContext.Response.Clear();
//base.OnException(filterContext);
}
Cette méthode doit gérer toutes les autres erreurs qui pourraient apparaître dans mon application, je ne veux pas les erreurs ci-dessus traitées à l'intérieur de mon Application_Error()
protected void Application_Error()
{
Exception exception = Server.GetLastError();
// Log the exception.
var logger = Container.Get<ILoggingService>();
logger.Error(User.Identity.Name, ExceptionHelper.BuildWebExceptionMessage(exception));
Response.Clear();
HttpException httpException = exception as HttpException;
RouteData routeData = new RouteData();
routeData.Values.Add("controller", "Error");
//if (httpException == null)
//{
routeData.Values.Add("action", "PublicError");
//}
//else //It's an Http Exception, Let's handle it.
//{
// switch (httpException.GetHttpCode())
// {
// case 404:
// // Page not found.
// routeData.Values.Add("action", "HttpError404");
// break;
// case 500:
// // Server error.
// routeData.Values.Add("action", "HttpError500");
// break;
// // Here you can handle Views to other error codes.
// // I choose a General error template
// default:
// routeData.Values.Add("action", "General");
// break;
// }
//}
// Pass exception details to the target error View.
routeData.Values.Add("error", exception);
// Clear the error on server.
Server.ClearError();
// Avoid IIS7 getting in the middle
Response.TrySkipIisCustomErrors = true;
// Call target Controller and pass the routeData.
IController errorController = new ErrorController();
errorController.Execute(new RequestContext(
new HttpContextWrapper(Context), routeData));
}