2011-07-10 16 views
0

純粋なjsonデータを返すasp.net mvcを使用してRESTful Web APIを構築しています。私のクライアントでは、backbone.jsを使って通信しています。ASP.NET MVCクライアントにHttpExceptionメッセージが表示されない

私の質問は、どのように私はjavascriptでメッセージをキャプチャするのですか?たとえば。ユーザーに削除権限がない場合、またはIDに一致するアイテムがない場合はどうなりますか?私はカスタムjsonの代わりにhttpエラーをスローするように言われてきました。 だから私のコードは次のようになります。

[HttpDelete] 
    public ActionResult Index(int id) 
    { 
     if (id == 1) 
     { 
      throw new HttpException(404, "No user with that ID"); 
     } 
     else if (id == 2) 
     { 
      throw new HttpException(401, "You have no authorization to delete this user"); 
     } 
     return Json(true); 
    } 

私はjavascriptのコールバックでメッセージにアクセスするにはどうすればよいですか?コールバックは次のようになります。

メッセージが表示されません。サーバーから返されたデータのどこにでも例外がスローされました。

答えて

1

クライアントでエラーコールバックを使用する必要があります。成功コールバックは、リクエストが成功した場合にのみトリガされます。

$.ajax({ 
    url: '/home/index', 
    type: 'DELETE', 
    data: { id: 1 }, 
    success: function (result) { 
     alert('success'); // result will always be true here 
    }, 
    error: function (jqXHR, textStatus, errorThrown) { 
     var statusCode = jqXHR.status; // will equal to 404 
     alert(statusCode); 
    } 
}); 

ここで401ステータスコードの警告があります。サーバーから401のHTTP例外を投げると、フォーム認証モジュールはそれを傍受し、自動的にLogInページをレンダリングし、401ステータスコードを200に置き換えます。この特定のステータスコードに対してエラーハンドラは実行されません。

+0

こんにちは、特定の文字列にアクセスするにはどうすればいいですか?「そのIDのユーザーはいません」、エラーをスローしながら渡されましたか? 'errorThrown'のデータは完全なエラーhtmlページです。 –

+0

@ Lolコーダー、文字列にアクセスしたい場合は、JSONオブジェクトを返す必要があり、例外をスローする必要はありません。あなたは2つのうちどれを選ぶべきですか:ステータスコードが十分な完全RESTFul APIか、エラーメッセージを暗示するか、JSONオブジェクトを返すことができるかを選択します。 –

0

私はちょうど私の質問What is the point of HttpException in ASP.NET MVCでこれに答えていますが、このようHttpStatusCodeResultを使用する場合は、実際にその文字列を取得することができます:あなたのコントローラで

return new HttpStatusCodeResult(500,"Something bad happened") 

そして、あなたは「悪い何かにアクセスすることができます起こった」このような使用して、たとえば、jQueryの$のアヤックスを():

    $.ajax: { 
         url: "@Url.Action("RequestsAdminAjax", "Admin")", 
         type: "POST", 
         data: function(data) { return JSON.stringify(data); }, 
         contentType: "application/json; charset=utf-8", 
         error: function (xhr, textStatus,errorThrown) { 
          debugger; 
          toggleAlert('<strong>Error: </strong>Unable to load data.', 'alert alert-danger'); 
         } 
        }, 

errorThrownが含まれています "悪い何か" が起こりました。

HTH。

関連する問題