客户端上未显示ASP.NET MVC HttpException消息

时间:2011-07-10 07:56:34

标签: javascript asp.net asp.net-mvc

我正在使用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
}

我没有在服务器返回的数据中看到任何消息都被引入异常。

2 个答案:

答案 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。