2016-05-03 9 views
1

MVCコントローラで次のコードを使用して、ajax呼び出し中に発生する例外を処理しています。MVCとangularjsで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;

角度はエラーを認識せず、成功関数を実行します。 filterContext.ExceptionHandled = false;をAngularに設定するとエラー関数が実行されますが、asp.netはjson結果のオブジェクト "Data"を通常の黄色エラーページに置き換えます。

asp.netがレスポンスを置き換えるのを避けることはできますか?

何か助けていただければ幸いですか?

よろしくお願いいたします。

+0

if条件がtrueを返すのは本当ですか? – Shyju

+0

はい、完全です。私はAngularヘッダを適切に設定しました:$ http.defaults.headers.post ["X-Requested-With"] = "XMLHttpRequest"; – Ayorus

+0

投稿した回答を見てください。 – Shyju

答えて

1

あなたには2つのものがありません。

  1. あなたは、フレームワークは、通常の例外処理の手順を行うと死のページのデフォルトの黄色の画面を返さないようにtrueExceptionHandledプロパティを設定する必要があります。

  2. 応答ステータスコードを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; 
    } 
} 
+1

本当です。どうもありがとうございました ! – Ayorus