Tworzę witrynę bazową MVC3 i szukam rozwiązania do obsługi błędów i renderowania niestandardowych widoków dla każdego rodzaju błędu. Wyobraź sobie więc, że mam kontroler „Error”, którego główną akcją jest „Index” (ogólna strona błędu), a ten kontroler będzie miał jeszcze kilka akcji dla błędów, które mogą pojawić się użytkownikowi, jak „Handle500” lub „HandleActionNotFound”.
Tak więc każdy błąd, który może wystąpić na stronie internetowej, może zostać obsłużony przez ten kontroler „Błąd” (przykłady: „Nie znaleziono kontrolera” lub „Akcji”, 500, 404, wyjątek dbException, itp.).
Używam pliku mapy witryny do definiowania ścieżek witryny (a nie trasy).
Na to pytanie już odpowiedziano, to jest odpowiedź dla Gweebz
Moja ostatnia metoda applicaiton_error jest następująca:
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");
}
}
}