web-dev-qa-db-fra.com

Angular 2 / Web Api - erreur d'analyse syntaxique syntaxique syntaxique erronée à la fin de l'entrée

J'ai un contrôleur API Web qui ressemble à ceci:

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

Ceci est la syntaxe correcte. Cependant, lorsque j'essaie d'appeler un service depuis Angular 2, je reçois le message d'erreur suivant: "json analyse d'erreur de syntaxe erreur de fin inattendue." Pour résoudre ce problème , Je dois mettre une valeur dans ActionResult telle que

return Ok(1)

Est-ce que je manque une configuration? Mon appel de service Angular 2) ressemble à ceci:

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

J'imagine que lorsque vous recevez une réponse vide (sans charge utile), vous n'avez pas besoin d'appeler la méthode json. Sous le capot, la réponse XHR est indéfinie, JSON.parse(undefined) est appelé et une erreur est générée.

Vous pouvez ignorer l'appel de l'opérateur map:

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

Autrement:

Tous mes http.get, post ou put call (pour l'uniformité):

.map(this.extractData)

Dans extractData (MISE À JOUR: grâce au feed-back de Raykrow, code court):

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

Strictement parlant, si votre API renvoie un code OK sans contenu, vous devez renvoyer 204 (aucun contenu) - Angular serait également satisfait de cela et ne chercherait rien à analyser. Par conséquent, votre méthode de contrôleur devenir:

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