asp.net-mvc - 扩展HandleError属性-状态码112031(连接重置)

标签 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
与服务器的连接已重置。

不知道为什么会这样。

最佳答案

我不确定这到底是怎么回事,但是我可以做出有根据的猜测。我们执行非常相似的操作,除了首先调用base.OnException,然后测试filterContext.ExceptionHandled以查看基本过滤器是否处理了异常。这一直对我们有用,与您所做的不同。请注意,基本过滤器将不会始终处理异常(有关详细信息,请参见源代码)。

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

因此,我的疯狂猜测是,在某些情况下,您的过滤器(总是在有AJAX请求时处理异常)和基本过滤器会做不同的事情。我建议您尝试使用我们使用的方法(首先调用基,仅在请求是AJAX请求且基表明已处理异常的情况下,才执行自定义AJAX处理),然后看是否还没有结束为您做得更好。

关于asp.net-mvc - 扩展HandleError属性-状态码112031(连接重置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1477760/

相关文章:

asp.net-mvc - 使用相同的方法签名发布和获取

asp.net-mvc - ASP.net MVC : Getting Required Roles for Login?

asp.net - 表单例份验证 - 滑动过期

javascript - 有没有办法改变堆栈跟踪中函数的路径?

node.js - 如何在nodejs和express中的一个地方处理异常

vb6 - 当循环内发生错误时,On Error 语句不起作用

javascript - 如何在 Ajax 响应中访问模型数据

javascript - 为什么 JavaScript 提交重新加载页面并通过按钮提交进行客户端页面验证

r - R 中的函数和 try()

javascript - 如何判断回调中错误的真正原因?