无法在控制器的ajax调用上抛出异常

时间:2016-03-18 14:00:08

标签: jquery ajax asp.net-mvc

我希望在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);      

                }
            });




1 个答案:

答案 0 :(得分:1)

由于您使用filterContext.ExceptionHandled = true;,服务器会理解您已经处理了异常,并且这就是为什么它将200作为状态返回。

您可以在filterContext.HttpContext.Response.StatusCode = 500;之后添加filterContext.ExceptionHandled = true;,它应该返回500作为您的AJAX调用的状态代码。