【问题标题】:Checking if response is 200 from HTTP POST request检查来自 HTTP POST 请求的响应是否为 200
【发布时间】:2020-04-12 23:45:45
【问题描述】:

HttpErrorResponse 为 200,但“成功”消息从不打印。相反,这会显示在控制台中:

HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", url: "http://localhost:5000/api/File/create", ok: false, …}
this.http.post('api/File/create', waldo, { observe: 'response' }).subscribe(data => {
    if (data.status == 200) {
        console.log("success");
    }
});

更新:

更新2:

 [HttpPost("create")]
        public ActionResult<File> Create([FromBody]File file)
        {
            try
            {
                _fileService.Create(file);
                return Ok("sucess");
            }
            catch(Exception e)
            {
                return NotFound();
            }



        }

【问题讨论】:

  • 如果你将第二个回调传递给subscribe,它会在那里结束吗?您是否有任何可能干扰请求的拦截器?
  • @jonrsharpe 不知道该怎么做.. 我刚开始使用 angular 8
  • 怎么办?通过回调?你已经通过了第一个,data =&gt; ...。看看例如rxjs-dev.firebaseapp.com/api/index/class/Observable#subscribe 看看你可以通过的各种东西。
  • console.log(data)if 语句之前的控制台上看起来如何?
  • @tenkmilan 断点永远不会到达那里...请查看更新

标签: angular angular8


【解决方案1】:

我认为这是因为您的创建 API 不返回 json。

尝试在请求选项中指定responseType,这样angular就不会尝试将响应内容解析为json对象:

this.http.post('api/File/create', waldo, { observe: 'response', responseType: 'text' })

【讨论】:

    【解决方案2】:

    默认情况下,Angular 端期望 JSON 响应。端点不响应 JSON 对象,它响应纯文本。 Angular 端尝试将纯文本解析为 JSON,但它无法做到,这就是引发错误的原因。

    有两种方法可以处理此问题:

    在服务器端,必须返回一个 JSON as answered here

    或者应该将 Angular 端的 http 客户端配置为期望纯文本。

    【讨论】:

      猜你喜欢
      • 2012-01-28
      • 1970-01-01
      • 2017-07-16
      • 2020-11-17
      • 2015-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多