Tengo un controlador API web que se parece a esto:
[HttpPost] public IHttpActionResult Test() { return Ok(); }
Esta es la sintaxis correcta. Sin embargo, cuando intento llamar a esto desde un servicio en Angular 2, aparece el mensaje de error: "Error de sintaxis de error de análisis json, final inesperado de la entrada". Para resolver este problema, tengo que poner un valor en ActionResult como
return Ok(1)
¿Me estoy perdiendo alguna configuración? Mi llamada de servicio de Angular 2 se ve así:
return this.http.post(API/Controller/Test).map(res => res.json());
De otra manera:
Todos mis http.get, post o put call (por uniformidad):
.map(this.extractData)
En extractData (ACTUALIZADO: gracias a los comentarios de Raykrow, código corto):
private extractData(res: Response) { return res.text() ? res.json() : {}; ; }
Supongo que cuando recibe una respuesta vacía (sin carga útil) no necesita llamar al método json
. Debajo del capó, la respuesta XHR no está definida, se JSON.parse(undefined)
y se genera un error.
Puede omitir la llamada del operador del map
:
return this.http.post(API/Controller/Test)/*.map(res => res.json())*/;
Estrictamente hablando, si su API devuelve un código OK sin contenido, debe devolver 204 (sin contenido). Angular también estaría contento con esto y no intentaría analizar nada. Entonces su método de controlador se convertiría en:
[HttpPost] public IHttpActionResult Test() { return NoContent(); }