执行异常过滤器后的空响应

时间:2013-06-25 14:58:13

标签: asp.net-mvc

我需要一个全局异常过滤器来处理异常并将自定义结果/消息返回给响应。在客户端,我有一个全局的ajax错误函数,可以处理每个ajax调用的所有错误。

问题是当我的应用程序中的某个地方抛出错误时会调用全局异常过滤器并尝试创建一些自定义响应,但在此之后,当呈现页面时,在客户端响应为空(警报输出)回应)。

重要的是我尝试使用Global.asax“Application_Error”事件并且响应有效。 这是为什么?是什么让我回答?我怎样才能使它发挥作用?

全局异常过滤器(客户端响应文本为空):

public class ExceptionAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        //I need to clear response so that I don't have yellow screen of death
       filterContext.HttpContext.Response.Clear();
       filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
       filterContext.HttpContext.Response.Write("OnException - Response");

       //this doesn't work too
       filterContext.Result = new JsonResult { Data = "OnException - JSON" };

       //doesn't help
       filterContext.HttpContext.Server.ClearError();
     }
}

Global.asax错误处理程序(响应显示在客户端):

protected override void Application_Error(object sender, EventArgs e)
{
    Response.Clear();
    Response.Write("Application_Error Test");
}

客户端全局ajax处理程序:

$(document).ajaxError(function (event, xhr, settings, exception) {

    event.stopPropagation();

    if (xhr != null) {

        alert(xhr.responseText);
    }
});

1 个答案:

答案 0 :(得分:2)

您需要设置filterContext.ExceptionHandled = true;(或Server.ClearError();