2016-04-28 12 views
1

私は私のMVCコントローラでの例外を処理するには、次のコードを使用しています:MVCリセットExceptionContext.Resultを回避するには?

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を使用しています。

filterContext.ExceptionHandledをtrueに設定すると、$ httpはsuccessCallback関数を実行しますが、設定しないと.NetはfilterContext.Resultをtipycalイエローページにリセットします。

私はerrorCallback機能($ HTTP)でエラーを管理するが、化するJsonResultの Dataプロパティをリセット.NETを避けたい

誰がどのようにそれを達成するための任意のアイデアを持っていますか?

すべてのヘルプは= D

答えて

1

角度$httpサービスがdefaultX-Requested-Withヘッダを送信しません理解されるであろう。明示的に有効にする必要があります。

var app = angular.module('yourApp', []); 

app.config(['$httpProvider', function ($httpProvider) { 
    $httpProvider.defaults.headers.common["X-Requested-With"] = 'XMLHttpRequest'; 
}]); 

EDIT:コメント

あたりのような問題は、あなたがあなたのOnException方法で2つのことが欠けているため.NETは

'データ' プロパティを置き換えることです。

  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; 
    } 
} 
+0

私はそれをしました。問題は.Netが 'Data'プロパティを置き換えることです – Ayorus

関連する問題