Angular 2/Web Api - json解析错误语法错误意外结束输入

aoa*_*son 30 rest json asp.net-web-api angular

我有一个Web API控制器,如下所示:

    [HttpPost]
    public IHttpActionResult Test()
    {
        return Ok();
    }
Run Code Online (Sandbox Code Playgroud)

这是正确的语法,但是当我尝试从Angular 2中的服务调用它时,我收到错误消息:"json解析错误语法错误意外结束输入." 要解决此问题,我必须将值放入ActionResult中,例如

return Ok(1)
Run Code Online (Sandbox Code Playgroud)

我错过了一些配置吗?我的Angular 2服务调用如下所示:

return this.http.post(API/Controller/Test).map(res => res.json());
Run Code Online (Sandbox Code Playgroud)

Jer*_*Xoo 47

其他方式:

我所有的http.get,post或put调用(统一):

.map(this.extractData)
Run Code Online (Sandbox Code Playgroud)

在extractData中(更新:感谢raykrow反馈,短代码):

private extractData(res: Response) {        
    return res.text() ? res.json() : {}; ;
}
Run Code Online (Sandbox Code Playgroud)

  • 我使用这个概念来解决同样的问题,但实现为`return res.text()?res.json():{};` (3认同)
  • 与raykow相同但是作为`map(res => res.text()?res.json():res)` (2认同)

Thi*_*ier 42

我想当你收到一个空响应(没有有效载荷)时,你不需要调用该json方法.在引擎盖下,XHR响应未定义,JSON.parse(undefined)被调用并引发错误.

你可以跳过map运营商的电话:

return this.http.post(API/Controller/Test)/*.map(res => res.json())*/;
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 7

严格来说,如果您的API返回没有内容的OK代码,则应返回204(无内容) - Angular也会对此感到满意,而不是尝试解析任何内容.所以你的控制器方法将成为:

[HttpPost]
public IHttpActionResult Test()
{
    return NoContent();
}
Run Code Online (Sandbox Code Playgroud)