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

Angular 2/Web Api-json解析错误语法错误输入意外结束,json,rest,asp.net-web-api,angular,Json,Rest,Asp.net Web Api,Angular,我有一个Web API控制器,如下所示: [HttpPost] public IHttpActionResult Test() { return Ok(); } return this.http.post(API/Controller/Test).map(res => res.json()); 这是正确的语法,但是当我尝试从Angular 2中的服务调用它时,我得到错误消息:“json解析错误语法错误输入意外结束”。要解决此问题,我必须在

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

    [HttpPost]
    public IHttpActionResult Test()
    {
        return Ok();
    }
return this.http.post(API/Controller/Test).map(res => res.json());
这是正确的语法,但是当我尝试从Angular 2中的服务调用它时,我得到错误消息:“json解析错误语法错误输入意外结束”。要解决此问题,我必须在ActionResult中输入一个值,例如

return Ok(1)
我是否缺少一些配置?我的Angular 2服务呼叫如下所示:

    [HttpPost]
    public IHttpActionResult Test()
    {
        return Ok();
    }
return this.http.post(API/Controller/Test).map(res => res.json());

我猜当您收到一个空响应(没有有效负载)时,您不需要调用
json
方法。在后台,XHR响应是未定义的,
JSON.parse(undefined)
被调用,并抛出一个错误

您可以跳过
map
操作员的呼叫:

return this.http.post(API/Controller/Test)/*.map(res => res.json())*/;
另一种方式:

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

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


严格地说,如果您的API返回一个没有内容的OK代码,那么您应该返回204(没有内容)-Angular也会对此感到高兴,不会尝试解析任何内容。因此,您的控制器方法将变成:

[HttpPost]
public IHttpActionResult Test()
{
    return NoContent();
}

我使用这个概念来解决相同的问题,但实现为
return res.text()?res.json():{}
与raykow相同,但与map(res=>res.text()?res.json():res)有关HttpClient中的类似问题,请参阅以下讨论: