2016-03-18 117 views
0

我想抛出ajax调用客户端的异常,但我没有状态代码。 我会怎样处理ajax错误函数的错误。无法抛出从控制器的AJAX调用异常

当我调用ajax函数时,它会在SaveAccount控制器上生成一些异常,我通过HandleExceptionAttribute处理它,并且我最终返回json,但它碰到了成功函数insted error。 请帮忙。由于

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

由于您使用filterContext.ExceptionHandled = true;服务器明白,你已经处理的例外,这就是为什么它会返回200状态。

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