我正在编写一个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,因为应用程序需要工作帐户身份验证。
答案 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);
}
});