首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展HandleError属性-状态代码112031 (连接重置)

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

Stack Overflow用户
提问于 2009-09-25 14:51:18
回答 1查看 1.1K关注 0票数 0

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

代码语言:javascript
复制
    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与服务器的连接已被重置。

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

EN

回答 1

Stack Overflow用户

发布于 2009-09-25 17:38:35

我不清楚到底是怎么回事,但我可以做一个有根据的猜测。我们做一些非常类似的事情,但我们首先调用base.OnException,然后测试filterContext.ExceptionHandled以查看基本过滤器是否处理了异常。这对我们来说总是有效的,而且和你所做的不一样。请注意,基本过滤器并不总是处理异常(有关详细信息,请参阅源代码)。

请注意,基本筛选器执行筛选器不做的事情,例如测试IsCustomErrorEnabled和特定类型的异常。有一些不应该处理的异常;关于这方面的详细信息,请参阅MVC源代码。

因此,我的猜测是,在某些情况下,您的过滤器(在有AJAX请求时总是处理异常)和基本过滤器执行不同的操作。我建议您尝试我们使用的方法(首先调用base,并且只有在请求是AJAX请求且基指示应该处理异常时才执行自定义AJAX处理),并查看这样做是否对您有更好的效果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1477760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档