web-dev-qa-db-ja.com

Angular 2 / Web Api-JSON解析エラー構文エラー予期しない入力の終了

次のようなWeb APIコントローラーがあります。

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

これは正しい構文ですが、Angular 2のサービスからこれを呼び出そうとすると、「json parsing error syntax error unexpected end of input。」というエラーメッセージが表示されます。この問題を解決するには、ActionResultに次のような値を入力する必要があります

return Ok(1)

いくつかの設定がありませんか? My Angular 2サービスコールは次のようになります。

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

空の応答(ペイロードなし)を受信した場合、jsonメソッドを呼び出す必要はないと思います。内部では、XHR応答は未定義であり、JSON.parse(undefined)が呼び出され、エラーがスローされます。

map演算子の呼び出しをスキップできます:

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

別の方法:

すべてのhttp.get、post、またはput呼び出し(均一性のため):

.map(this.extractData)

ExtractData内(更新:raykrowフィードバックのおかげで、短いコード):

private extractData(res: Response) {        
    return res.text() ? res.json() : {}; ;
}
47
JeromeXoo

厳密に言えば、APIがコンテンツなしでOKコードを返す場合、204(コンテンツなし)を返す必要があります-Angularもこれに満足し、何も解析しようとしません。になる:

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