我创建了一个继承自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与服务器的连接已被重置。
不知道为什么会发生这种事。
发布于 2009-09-25 17:38:35
我不清楚到底是怎么回事,但我可以做一个有根据的猜测。我们做一些非常类似的事情,但我们首先调用base.OnException,然后测试filterContext.ExceptionHandled以查看基本过滤器是否处理了异常。这对我们来说总是有效的,而且和你所做的不一样。请注意,基本过滤器并不总是处理异常(有关详细信息,请参阅源代码)。
请注意,基本筛选器执行筛选器不做的事情,例如测试IsCustomErrorEnabled和特定类型的异常。有一些不应该处理的异常;关于这方面的详细信息,请参阅MVC源代码。
因此,我的猜测是,在某些情况下,您的过滤器(在有AJAX请求时总是处理异常)和基本过滤器执行不同的操作。我建议您尝试我们使用的方法(首先调用base,并且只有在请求是AJAX请求且基指示应该处理异常时才执行自定义AJAX处理),并查看这样做是否对您有更好的效果。
https://stackoverflow.com/questions/1477760
复制相似问题