扩展HandleError属性 - 状态代码112031(连接重置)

时间:2009-09-25 14:51:19

标签: asp.net-mvc error-handling

我创建了一个新类,它继承自HandleErrorAttribute以不同方式处理ajax请求。唯一的覆盖是OnException方法:

    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.ExceptionHandled = true;
            filterContext.HttpContext.Response.Clear();
            filterContext.HttpContext.Response.StatusCode = 500;
            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
            filterContext.Result = new JsonResult { Data = errorText };
            return;
        }
        base.OnException(filterContext);
    }

这确实有效,大约一半时间。工作时,响应中的状态代码为500,并提供错误消息。如果没有,状态代码为12031,错误消息为空。

显然,状态代码12031表示:

ERROR_INTERNET_CONNECTION_RESET                与服务器的连接已重置。

不知道为什么会这样。

1 个答案:

答案 0 :(得分:0)

我不确定这里到底发生了什么,但我可以做出有根据的猜测。我们做了一些非常相似的事情,除了我们首先调用base.OnException,然后我们测试filterContext.ExceptionHandled以查看基本过滤器是否处理了异常。这一直对我们有用,并且与你的不同。请注意,基本过滤器不会始终处理异常(有关详细信息,请参阅源代码)。

请注意,基本过滤器会执行过滤器不执行的操作,例如测试IsCustomErrorEnabled以及异常的特定类型。有些例外情况不应该处理;再次参考MVC源代码了解详细信息。

所以我的猜测是,在某些情况下,你的过滤器(当有一个AJAX请求时总是处理异常)和基过滤器做不同的事情。我建议您尝试我们正在使用的方法(首先调用base,如果请求是一个AJAX请求,只执行自定义AJAX处理,基础已指示应该处理异常)并且看看这不会最终为你做得更好。