Ich verwende einen Filter, um Ausnahmen zu protokollieren, die durch Aktionen ausgelöst werden, die wie folgt aussehen:
public override void OnActionExecuted(ActionExecutedContext filterContext) {
if (filterContext.Exception != null) {
//logger.Error(xxx);
}
base.OnActionExecuted(filterContext);
}
Jetzt möchte ich alle meine JSON-Aktionen behandeln, um JSON-Ergebnisse mit Ausnahmeinformationen zurückzugeben. Dies ermöglicht die Ajax-Aufrufe, um festzustellen, ob es einen Fehler auf dem Server anstelle des Empfangs der Fehlerseite Quelle, die nutzlos für Ajax ist. Ich habe diese Methode für JSON-Aktionen in meiner AppControllerBase implementiert:
public ActionResult JsonExceptionHandler(Func < object > action) {
try {
var res = action();
return res == null ? JsonSuccess() : JsonSuccess(res);
} catch (Exception exc) {
return JsonFailure(new {
errorMessage = exc.Message
});
}
}
Das funktioniert gut, aber natürlich verhindert die catch()-Anweisung, dass alle Filter die Ausnahme behandeln, da eigentlich keine Ausnahme ausgelöst wird. Gibt es eine Möglichkeit, wie die Ausnahme für Filter (filterContext.Exception) verfügbar zu lassen?