ASP.MVC HandleError-Attribut funktioniert nicht
Ich weiß, dass es ein häufiges Problem ist, aber ich habe viele Diskussionen ohne Ergebnis gecrawlt.
Ich versuche mit dem HandleError ASP.MVC-Attribut Fehler zu behandeln. Ich benutze MVC 4.
Meine Fehlerseite befindet sich in Views / Shared / Error.cshtml und sieht folgendermaßen aus:
Test error page
<hgroup class="title">
<h1 class="error">Error.</h1>
<h2 class="error">An error occurred while processing your request.</h2>
</hgroup>
Meine FilterConfig.cs im App-Start-Ordner lautet:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
}
Meine Steuerung:
public class TestController : Controller
{
[HandleError(View = "Error")]
public ActionResult Index()
{
throw new Exception("oops");
}
}
Und schließlich hat meine Web.config in den folgenden Knoten:
<customErrors mode="On" defaultRedirect="Error">
</customErrors>
Wenn ich die Controller-Aktion aufrufe, wird ein weißer Bildschirm mit folgendem Text angezeigt:
Serverfehler in '/' AnwendungLaufzeitfehler Beschreibung: Bei der Verarbeitung Ihrer Anforderung ist eine Ausnahme aufgetreten. Außerdem ist beim Ausführen der benutzerdefinierten Fehlerseite für die erste Ausnahme eine andere Ausnahme aufgetreten. Die Anfrage wurde abgebrochen.
Wenn defaultRedirect = "Error" in der Web.config nicht gesetzt ist, erhalte ich einen gelben Bildschirm mit folgendem Text:
Serverfehler in '/' AnwendungLaufzeitfehler Beschreibung: Auf dem Server ist ein Anwendungsfehler aufgetreten. Die aktuellen benutzerdefinierten Fehlereinstellungen für diese Anwendung verhindern, dass die Details des Anwendungsfehlers angezeigt werden.
Details: Damit die Details dieser bestimmten Fehlermeldung auf dem lokalen Server angezeigt werden können, erstellen Sie ein Tag in einer Konfigurationsdatei "web.config" im Stammverzeichnis der aktuellen Webanwendung. Dieses Tag sollte dann das Attribut "mode" auf "RemoteOnly" setzen. Stellen Sie "mode" auf "Off", damit die Details auf Remote-Computern angezeigt werden können.
Notes: Die aktuell angezeigte Fehlerseite kann durch eine benutzerdefinierte Fehlerseite ersetzt werden, indem das Attribut "defaultRedirect" des Konfigurationstags der Anwendung so geändert wird, dass es auf eine benutzerdefinierte Fehlerseiten-URL verweist.
Weiß jemand, was falsch sein kann?
BEARBEITEN
Errors wurden durch stark typisiertes Layout verursacht. Wenn ein Fehler ausgelöst wird, erstellt der Fehlerbehandlungsmechanismus von MVC ein HandleErrorInfo-Objekt, das an die Fehleransicht übergeben wird. Wenn wir jedoch stark typisiertes Layout verwenden, stimmen die Typen nicht überein.
Lösung verwendet in meinem Fall die Application_Error-Methode in Global.asax, die von SBirthare unten perfekt beschrieben wurde.