我希望在ajax调用的客户端抛出异常,但我没有状态代码。 我做了什么来处理ajax错误函数的错误。
当我调用ajax函数时,它会在SaveAccount控制器上生成一些异常,我通过HandleExceptionAttribute处理它,最后我返回json,但它触及成功函数,错误是什么问题。 请帮忙。感谢
public class HandleExceptionAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest() && filterContext.Exception != null)
{
filterContext.Result = new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new
{
filterContext.Exception.Message,
}
};
filterContext.ExceptionHandled = true;
}
else
{
base.OnException(filterContext);
}
}
}
[HandleExceptionAttribute]
[AllowAnonymous]
[HttpPost]
public ActionResult SaveAccount(AccountViewModel vm)
{
try
{
using (var context = new AdvisorFinancialEntities())
{
..........
context.SaveChanges();
}
}
catch (Exception ex)
{
Exception e = new Exception("Failed to save account");
e.Data.Add("Accounts", "SaveAccount");
throw e;
}
return Json(true, JsonRequestBehavior.AllowGet);
}
$.ajax({
url: '@Url.Action("SaveAccount", "Accounts")',
cache: false,
type: 'POST',
contentType: 'application/json',
data: jsonData,
success: function (result) {
ShowToastMessage("Account has been saved successfully", "Success",true);
Reset();
},
error: function (xhr, textStatus, errorThrown) {
var err = JSON.parse(xhr.responseText);
ShowToastMessage(err.Message, "Save Account",false);
}
});

答案 0 :(得分:1)
由于您使用filterContext.ExceptionHandled = true;
,服务器会理解您已经处理了异常,并且这就是为什么它将200作为状态返回。
您可以在filterContext.HttpContext.Response.StatusCode = 500;
之后添加filterContext.ExceptionHandled = true;
,它应该返回500作为您的AJAX调用的状态代码。