Ajax错误 - ASP.NET MVC应用程序中的errorThrown

时间:2017-11-10 00:53:33

标签: c# jquery ajax asp.net-mvc ssl

我正在编写一个asp.net MVC应用程序,它将补充我编写的另一个应用程序。在我的旧应用程序中,我将错误从控制器发送到客户端,如下所示:

return new HttpStatusCodeResult(400, "Whatever went wrong.")

然后,在我的客户端,ajax错误看起来有点像这样:

error: function (jqXHR, textStatus, errorThrown) { redAlert(errorThrown); }

这一切都很完美。无论我在控制器端放入什么消息都会弹出客户端。

现在,我尝试用这个新应用程序做同样的事情。但是,errorThrown每次都没有任何内容。

我不知道从哪里开始寻找所以任何帮助或指导将不胜感激。

谢谢!

编辑1

在与Shyju讨论了一些内容之后,HttpStatusCodeResult似乎没有在新应用程序的标题中发回消息。仍在尝试解决这个问题。

修改2

经过一些测试,我发现自定义错误消息不会通过使用SSL发送。为什么这是一个问题,我该如何解决这个问题?我需要使用SSL,因为应用程序需要工作帐户身份验证。

1 个答案:

答案 0 :(得分:0)

当您的服务器代码从您的网络API控制器返回400错误请求响应时,您发送的消息文本将位于服务器的响应中

{"Message":"Whatever went wrong."}  

现在$.ajax将使用此响应并从中创建一个js对象,并将其设置为responseJSON对象的jqXHR属性。所以你可以简单地访问它。

$.ajax({
    url: 'yourApiEndpoint' 
}).done(function (data) {
    console.log(data);
}).fail(function (jqXHR, textStatus, errorThrown) {
    if (jqXHR.responseJSON) {
        alert(jqXHR.responseJSON.Message);
    }
});

从MVC控制器操作方法返回HttpStatusCodeResult 时,IIS将返回400页的标记。所以响应基本上就是HTML标记。响应头将包含状态代码和消息,$.ajax方法将设置从服务器发送到xhr对象的statusText属性的状态消息。

.fail(function (jqXHR, textStatus, errorThrown) {
     if (jqXHR.statusText) {
         alert(jqXHR.statusText);
     }
});