Sto sviluppando un sito Web di base MVC3 e sto cercando una soluzione per la gestione degli errori e il rendering di visualizzazioni personalizzate per ogni tipo di errore. Quindi immagina di avere un controller "Error" in cui la sua azione principale è "Index" (pagina di errore generico) e questo controller avrà un paio di azioni in più per gli errori che potrebbero apparire all'utente come "Handle500" o "HandleActionNotFound".
Quindi ogni errore che può verificarsi sul sito Web può essere gestito da questo controller "Errore" (esempi: "Controller" o "Azione" non trovati, 500, 404, dbException, ecc.).
Sto usando il file Sitemap per definire i percorsi del sito Web (e non il percorso).
A questa domanda è già stata data una risposta, questa è una risposta a Gweebz
Il mio metodo finale applicationiton_error è il seguente:
protected void Application_Error() {
//while my project is running in debug mode
if (HttpContext.Current.IsDebuggingEnabled && WebConfigurationManager.AppSettings["EnableCustomErrorPage"].Equals("false"))
{
Log.Logger.Error("unhandled exception: ", Server.GetLastError());
}
else
{
try
{
var exception = Server.GetLastError();
Log.Logger.Error("unhandled exception: ", exception);
Response.Clear();
Server.ClearError();
var routeData = new RouteData();
routeData.Values["controller"] = "Errors";
routeData.Values["action"] = "General";
routeData.Values["exception"] = exception;
IController errorsController = new ErrorsController();
var rc = new RequestContext(new HttpContextWrapper(Context), routeData);
errorsController.Execute(rc);
}
catch (Exception e)
{
//if Error controller failed for same reason, we will display static HTML error page
Log.Logger.Fatal("failed to display error page, fallback to HTML error: ", e);
Response.TransmitFile("~/error.html");
}
}
}