2016-03-01 17 views
27

のエラー構文エラー予期せぬ終了を解析し、JSON、私はこのようになりますウェブAPIコントローラを持っている:角度2/Web APIを - 入力

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

私はからこれを呼び出すしようとすると、これはしかし、正しい構文でありますAngular 2のサービスでは、エラーメッセージ "json parsing error syntax error予期しない入力の終了"が表示されます。この問題を解決するために、私はそのような

return Ok(1) 

としてのActionResultに値を配置する必要があり、私はいくつかの設定をしないのですか?マイ角度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(UPDATED:レイクローのフィードバックのおかげで、ショートコード):

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

感謝を! – ozOli

+0

awesome solution @JeromeXoo、thanks –

+3

私はこの問題を解決するのにこのコンセプトを使用しましたが、 'return res.text()? res.json():{}; ' – raykrow

5

厳密に言えば、あなたのAPIが内容のないOKコードを返す場合、204(内容なし)を返すべきです - Angularもこれに満足し、何かを解析しようとしません。だからあなたのコントローラのメソッドはなる:

[HttpPost] 
public IHttpActionResult Test() 
{ 
    return NoContent(); 
} 
関連する問題