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

Posted

技术标签:

【中文标题】Angular 2/Web Api - json 解析错误语法错误意外结束输入【英文标题】:Angular 2/Web Api - json parsing error syntax error unexpected end of input 【发布时间】:2016-06-14 13:11:44 【问题描述】:

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

    [HttpPost]
    public IHttpActionResult Test()
    
        return Ok();
    

这是正确的语法,但是当我尝试从 Angular 2 中的服务调用它时,我收到错误消息:“json parsing error syntax error unexpected end of input。”要解决此问题,我必须在 ActionResult 中输入一个值,例如

return Ok(1)

我是否缺少某些配置?我的 Angular 2 服务调用如下所示:

return this.http.post(API/Controller/Test).map(res => res.json());

【问题讨论】:

对于 HttpClient 中的类似问题,请参阅此讨论:github.com/angular/angular/issues/18680 【参考方案1】:

另一种方式:

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

.map(this.extractData)

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

private extractData(res: Response)         
    return res.text() ? res.json() : ; ;

【讨论】:

我使用这个概念来解决同样的问题,但实现为return res.text() ? res.json() : ; 与raykow相同但与map(res => res.text() ? res.json() : res)【参考方案2】:

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

您可以跳过map 运算符的调用:

return this.http.post(API/Controller/Test)/*.map(res => res.json())*/;

【讨论】:

【参考方案3】:

严格来说,如果您的 API 返回一个没有内容的 OK 代码,您应该返回 204(无内容)——Angular 也会对此感到满意,并且不会尝试解析任何内容。所以你的控制器方法会变成:

[HttpPost]
public IHttpActionResult Test()

    return NoContent();

【讨论】:

以上是关于Angular 2/Web Api - json 解析错误语法错误意外结束输入的主要内容,如果未能解决你的问题,请参考以下文章

对预检请求的响应未通过访问控制(Angular 2 - Web Api)

Angular 5,来自 API 的 JSON 数组

使用angular4和asp.net core 2 web api做个练习项目

使用angular4和asp.net core 2 web api做个练习项目

JSON.stringify API 返回 415 (.net & angular)

http.put 在使用 Chrome 但不是 IE 的 Angular 2 / Web API 中抛出错误