【问题标题】:Extended HandleError Attribute - status code 112031 (connection reset)扩展 HandleError 属性 - 状态代码 112031(连接重置)
【发布时间】:2010-12-01 10:56:24
【问题描述】:

我创建了一个继承自 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 与服务器的连接已重置。

不知道为什么会发生这种情况。

【问题讨论】:

    标签: asp.net-mvc error-handling


    【解决方案1】:

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

    请注意,基本过滤器会执行您的过滤器不执行的操作,例如测试 IsCustomErrorEnabled 和异常的特定类型。有一些不应该处理的异常;再次,请参阅 MVC 源代码了解详情。

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

    【讨论】:

    • 尝试了您的建议。还是行不通。我确实注意到只有在操作方法中引发异常时才能重现此问题。
    猜你喜欢
    • 1970-01-01
    • 2016-08-10
    • 2018-02-25
    • 2018-05-17
    • 2016-03-02
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多