.net核心控制器返回200 Ok时,Ajax请求返回错误

时间:2018-09-27 13:51:55

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

我正在通过ajax请求调用.net核心操作。它甚至没有在等待return语句,但是,一旦我调用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();
        }
    });
});

我在做什么错了?

2 个答案:

答案 0 :(得分:0)

问题是您的控制器正在返回内容,这是IAction结果中200状态代码结果的例外。

您的控制器正在正确捕获异常,但由于Content return语句而仍返回200。

答案 1 :(得分:0)

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

<块引用>

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

.net core 中的

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 格式的更多信息,请访问 json.org。

相关问题