我创建了一个新类,该类继承自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/