2016-03-01 198 views
27

意外結束我有一個Web API控制器,它看起來像這樣:角2 /網絡API - JSON解析錯誤語法錯誤輸入

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

這是正確的語法,但是當我嘗試從電話本服務在Angular 2中,我收到錯誤消息:「json解析錯誤語法錯誤意外結束輸入。」要解決這個問題,我必須將一個值放入ActionResult,如

return Ok(1) 

我是否缺少一些配置?我的角2服務調用看起來是這樣的:

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

對於類似的問題在HttpClient的看到這樣的討論:https://github.com/angular/angular/issues/18680 –

回答

38

我想,當你收到一個空的響應(沒有有效載荷)你不需要調用json方法。在引擎蓋下,XHR響應未定義,調用JSON.parse(undefined)並引發錯誤。

你可以跳過map運營商的呼叫:

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

另一種方式:

我所有的http.get,後期或將呼叫(對均勻性):

.map(this.extractData) 

在extractData中(更新:感謝raykrow反饋,短碼):

private extractData(res: Response) {   
    return res.text() ? res.json() : {}; ; 
} 
+0

謝謝你的分享! – ozOli

+0

真棒解決方案@JeromeXoo,謝謝 –

+3

我用這個概念解決了相同的問題,但實現爲'return res.text()? res.json():{};' – raykrow

5

嚴格來說,如果你的API返回一個沒有內容的OK代碼,你應該返回204(無內容) - Angular也會對此感到滿意,而不是試圖解析任何東西。所以,你的控制器的方法將成爲:

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