2011-07-10 74 views
0

我正在用asp.net mvc構建一個REST風格的web api,它會返回純json數據。在我的客戶端,我使用backbone.js與之通信。ASP.NET MVC HttpException消息未在客戶端上顯示

我的問題是,我如何捕捉JavaScript中的消息?例如。如果用戶沒有權限刪除或沒有與該ID匹配的項目,該怎麼辦?我被告知拋出http錯誤而不是自定義json。 所以我的代碼是:

[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回調訪問的消息?回調將如下所示:

function (model, response) { 
    alert("failed"); 
    //response.responseText would contain the html you would see for asp.net 
} 

我沒有看到消息,我從服務器返回的數據中發現任何異常情況。

回答

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頁面並用200替換401狀態碼。所以錯誤處理程序將不會被執行用於這個特定的狀態碼。

+0

嗨,我如何訪問一個特定的字符串,如:''沒有該用戶名的用戶''',這是拋出錯誤時通過? 'errorThrown'中的數據是完整的錯誤html頁面。 –

+0

@Lol編碼器,如果你想訪問字符串和東西,你應該返回JSON對象,而不是拋出任何異常。您應該選擇您想要的兩種:完全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。

相關問題