我正在使用asp.net mvc构建RESTful web api,它返回纯json数据。在我的客户端,我正在使用backbone.js与之通信。
我的问题是,如何在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
}
我没有在服务器返回的数据中看到任何消息都被引入异常。
答案 0 :(得分: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状态代码。因此,不会对此特定状态代码执行错误处理程序。
答案 1 :(得分:0)
我刚刚在我的问题What is the point of HttpException in ASP.NET MVC中回答了这个问题,但是如果你使用像这样的HttpStatusCodeResult,你实际上可以获得该字符串:
在您的控制器中:
return new HttpStatusCodeResult(500,"Something bad happened")
你可以使用像这样的jQuery $ .ajax()来访问“发生了不好的事情”:
$.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。