次のような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());
空の応答(ペイロードなし)を受信した場合、json
メソッドを呼び出す必要はないと思います。内部では、XHR応答は未定義であり、JSON.parse(undefined)
が呼び出され、エラーがスローされます。
map
演算子の呼び出しをスキップできます:
return this.http.post(API/Controller/Test)/*.map(res => res.json())*/;
別の方法:
すべてのhttp.get、post、またはput呼び出し(均一性のため):
.map(this.extractData)
ExtractData内(更新:raykrowフィードバックのおかげで、短いコード):
private extractData(res: Response) {
return res.text() ? res.json() : {}; ;
}
厳密に言えば、APIがコンテンツなしでOKコードを返す場合、204(コンテンツなし)を返す必要があります-Angularもこれに満足し、何も解析しようとしません。になる:
[HttpPost]
public IHttpActionResult Test()
{
return NoContent();
}