30

I have a Web API controller that looks like this:

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

This is correct syntax, However when I try to call this from a service in Angular 2, I get the error message: "json parsing error syntax error unexpected end of input." To resolve this issue, I have to put a value into the ActionResult such as

return Ok(1)

Am I missing some configuration? My Angular 2 service call looks like this:

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

3 Answers 3

47

Another way:

All my http.get, post or put call (for uniformity):

.map(this.extractData)

In extractData (UPDATED: thanks to raykrow feedback, short code):

private extractData(res: Response) {        
    return res.text() ? res.json() : {}; ;
}
Sign up to request clarification or add additional context in comments.

2 Comments

I used this concept to fix the same issue but implemented as return res.text() ? res.json() : {};
same as raykow but as map(res => res.text() ? res.json() : res)
42

I guess that when you receive an empty response (without payload) you don't need to call the json method. Under the hood, the XHR response is undefined, JSON.parse(undefined) is called and an error is thrown.

You could skip the call of the map operator:

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

Comments

7

Strictly speaking if your API is returning an OK code with no content you should return 204 (no content) - Angular would also be happy with this and not try to parse anything. So your controller method would become:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.