Nehmen wir an, ich stelle den folgenden Code irgendwo auf eine Masterseite in meiner ASP.NET MVC-Site:
%Vor%Auch wenn ein Attribut [HandleError] auf meinem Controller platziert ist, blubbert diese Ausnahme immer noch. Wie kann ich mit solchen Fehlern umgehen? Ich möchte in der Lage sein, zu einer Fehlerseite zu routen und trotzdem die Ausnahmedetails protokollieren zu können.
Was ist der beste Weg, um mit so etwas umzugehen?
Bearbeiten: Eine Lösung, die ich in Erwägung zog, wäre, einen neuen Controller hinzuzufügen: UnhandledErrorController. Kann ich eine Application_Error-Methode in Global.asax einfügen und dann zu diesem Controller umleiten (wo entscheidet er, was mit der Ausnahme geschehen soll)?
Hinweis: Das defaultRedirect im customErrors-Element web.config gibt die Ausnahmeinfo nicht weiter.
Da MVC auf asp.net aufgebaut ist, sollten Sie in eine globale Fehlerseite definieren können web.config , genau wie in Webformularen, zB
%Vor%Aktivieren Sie customErrors:
%Vor%und umleiten zu einem benutzerdefinierten Fehler-Controller:
%Vor% Sie können einen Filter erstellen, der in der Methode OnActionExecuted
nach einer Ausnahme sucht:
Dann können Sie [WatchException]
auf einen Controller oder eine Aktionsmethode setzen und Ausnahmen protokollieren. Wenn Sie viele Controller haben, könnte das mühsam sein. Wenn Sie also einen gemeinsamen Basis-Controller haben, können Sie OnActionExecuted
dort überschreiben und dasselbe tun. Ich bevorzuge die Filtermethode.
Was die anzuzeigende Seite betrifft, müssen Sie einen Abschnitt customErrors erstellen in Ihrer web.config und richten Sie es für irgendwelche Statuscodes ein, die Sie behandeln möchten.
Beispiel:
%Vor%Was das Protokollieren von Ausnahmen betrifft, würde ich ELMAH empfehlen. Es lässt sich gut mit ASP.NET MVC-Sites integrieren.
Tags und Links asp.net-mvc error-handling