Я использую фильтр для регистрации исключений, вызванных действиями, который выглядит следующим образом:
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Exception != null)
{
//logger.Error(xxx);
}
base.OnActionExecuted(filterContext);
}
Теперь я хотел бы обработать все мои действия JSON, чтобы вернуть результат JSON с информацией об исключении. Это позволяет Ajax-вызовам определять, была ли какая-либо ошибка на сервере, вместо того, чтобы получать источник страницы ошибок, который бесполезен для Ajax. Я реализовал этот метод для действий JSON в моем AppControllerBase:
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});
}
}
Это хорошо работает, но, очевидно, оператор catch () не позволяет всем фильтрам обрабатывать исключение, потому что на самом деле исключение не выдается. Есть ли способ оставить исключение доступным для фильтров (filterContext.Exception)?