ASP.Net MVC - 如何在JSON操作中处理异常(返回JSON错误信息),还发布过滤器的异常?

我正在使用过滤器来记录由以下操作引发的异常:
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Exception != null)
        {
           //logger.Error(xxx);
        }
        base.OnActionExecuted(filterContext);
    }
现在我想处理我的所有JSON操作以返回带有异常信息的JSON结果。这允许Ajax调用确定服务器上是否有任何错误,而不是接收错误页面源,这对Ajax来说是无用的。我在AppControllerBase中为JSON操作实现了这个方法:
    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)?     
已邀请:
您可以将异常存储在RequestContext中并在过滤器中拦截它。     
解决方案: 行动
    public ActionResult JsonExceptionHandler(Func<object> action)
    {
            try
            {
                    var res = action();
                    return res == null ? JsonSuccess() : JsonSuccess(res);
            }
            catch(Exception exc)
            {
                    controller.ControllerContext.HttpContext.AddError(exc);
                    return JsonFailure(new {errorMessage = exc.Message});
            }
    }
过滤
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
            var exception = filterContext.Exception ?? filterContext.HttpContext.Error;
            if (exception != null)
            {
               //logger.Error(xxx);
            }

            if (filterContext.Result != null && 
                filterContext.HttpContext.Error != null)
            {
               filterContext.HttpContext.ClearError();
            }

            base.OnActionExecuted(filterContext);
    }
    

要回复问题请先登录注册