【问题标题】:Ajax error - errorThrown in ASP.NET MVC applicationAjax 错误 - 在 ASP.NET MVC 应用程序中引发错误
【发布时间】:2017-11-10 00:53:32
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    当您的服务器代码从您的 Web api 控制器返回 400 错误请求响应时,您发送的消息文本将在服务器的响应中作为

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

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

    $.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);
         }
    });
    

    【讨论】:

    • 我的 jqXHR 似乎没有 responseJSON。它 errorThrown 在另一个应用程序上工作,所以我必须在旧应用程序中写一些东西。我也试过更改错误失败,它根本没有触发。
    • 服务器调用的响应码是什么?如果是 400,则应该触发 fail 处理程序。您使用的是什么版本的 jQuery?我用 jQuery 3.2.1 进行了测试,当服务器返回 400 和消息时它可以工作。
    • 我的印象是它来自一个 web api 控制器。如果要从 MVC 控制器返回,则需要使用 statusText 属性。查看更新后的答案。
    • 我也在使用 3.2.1。 statusText 属性只是返回“错误”。我只是不明白它是如何在一个应用程序中而不是在另一个应用程序中工作的。
    • 响应的状态标头是什么?是 400 吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多