【问题标题】:Ajax request returning error while .net core controller returning 200 OkAjax 请求返回错误,而 .net 核心控制器返回 200 Ok
【发布时间】:2019-03-03 11:12:54
【问题描述】:

我正在通过 ajax 请求调用 .net 核心操作。它甚至没有等待返回语句,但只要我调用 Auth0 管理 API,它就会返回错误。

   [HttpPost]
    public async Task<IActionResult> Create([FromBody]ConnectionCreateRequest model)
    {
        try
        {
            var result = await _managementApiClient.Connections.CreateAsync(model);
            return Ok();
        }
        catch (Exception ex)
        {
            return Content(ex.Message);
        }
    }

结果语句后返回错误。

这里是ajax调用:

  $.ajax({
        type: "POST",
        url: '@Url.Action("Create", "Connection")',
        contentType: "application/json charset=utf-8",
        data: JSON.stringify(model),
        success: function (result) {
            alert('Connections has been created successfully');
        },
        error: function (result, err) {
            alert(err);
        },
        complete: function () {
            hideLoadingGif();
        }
    });
});

我做错了什么?

【问题讨论】:

  • 直接尝试data: model,... 结果语句后返回错误。错误说明了什么?
  • Ajax 调用的错误是什么?
  • 只是一个显示“错误”的警告框
  • @ZakariaAcharki,如果我直接传递 data: model 那么我的操作中的模型参数为空
  • model的内容是什么?

标签: javascript jquery ajax asp.net-core asp.net-ajax


【解决方案1】:

问题是您的控制器在异常中返回内容,即 IAction Result 条款中的 200 状态代码结果。

您的控制器正在正确捕获异常,但由于内容返回语句仍然返回 200。

【讨论】:

  • 不,我有一个异常调试器。当出现异常时,它会调用 catch 块。正如我所说,没有例外,它调用 return Ok() 语句。
  • 我会提到,在最初的问题中,不管怎样,即使抛出异常,您仍然会收到 200。
  • @cl0ud 你是对的 - js 错误处理程序将不会从 C# 中提取错误。但是,OP 正在获取错误处理程序,所以这不是原因(尽管它可能是 OP 提出的下一个问题......)
  • @freedomn-m 也许我误解了这个问题,但无论如何这证实了 js 错误处理程序在任何情况下都不可能像你所说的那样命中。
  • 好吧,不是在 any 的情况下,因为 OP 正在(曾经)获取错误处理程序 - 但在出现其他问题时获取错误处理程序(在这种情况下,他们已经指定 JSON 但未返回 JSON,因此 jquery 无法将 200“(无消息)”转换为 JSON 并传递给错误处理程序。
【解决方案2】:

问题是在 $.ajax 方法中你没有指定dataType 属性。在这种情况下,$.ajax 根据响应内容类型进行“智能猜测”:

dataType(默认:智能猜测(xml、json、script 或 html)) 您期望从服务器返回的数据类型。如果没有指定,jQuery 将尝试根据响应的 MIME 类型推断它。

.net 核心中的Ok() 方法返回空响应,响应标头中未指定 MIME 类型。这就是 $.ajax 使用 statusText "parseerror" 触发错误回调的原因。

解决办法是:

  • 设置$.ajax dataType 选项为"text",$ajax 将接受空响应并触发成功回调
  • 在.net core中返回Json(true)Json(null)表示成功响应,$.ajax会自动识别为json响应并触发成功回调。

$.ajax dataType option 用于 json 响应的文档:

从 jQuery 1.9 开始,如果 dataType 为 json;服务器应该返回 null 或 {} 的响应。 (看 json.org 以获取有关正确 JSON 格式的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 2014-12-28
    • 2019-10-29
    相关资源
    最近更新 更多