我在MVC控制器中使用以下代码来处理ajax调用期间发生的异常。
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
filterContext.Result = new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { Error = true, Msj = filterContext.Exception.Message }
};
}
}
我想使用对象$http(AngularJs)的errorCallback函数在前端处理错误。如果我设置filterContext.ExceptionHandled = true;
,问题如下
Angular无法识别错误并执行成功函数。如果我设置filterContext.ExceptionHandled = false;
Angular将执行错误函数,但asp.net将用通常的黄色错误页面替换json结果的对象"Data"。
有可能避免asp.net代替响应吗?
有什么需要帮忙的吗?
问候
您缺少了两件事。
-
您需要将
ExceptionHandled
属性设置为true
,这样框架就不会执行正常的异常处理过程,并返回死亡页面的默认黄屏。 -
您需要将响应状态代码指定为5xx(错误响应)。客户端库将根据返回的响应的状态代码来确定是执行成功回调还是错误回调。
这应该行得通。
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
filterContext.Result = new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new { Error = true, Msj = filterContext.Exception.Message }
};
filterContext.HttpContext.Response.StatusCode = 500;
filterContext.ExceptionHandled = true;
}
}