Web API 2 - ApiController.InternalServerError() returns HTTP 400 status code

asp.net, asp.net-web-api, rest

Solution

Right, this was a known issue which was fixed after Web API 2 release...you can use the following workaround to fix this issue..example:

return new ResponseMessageResult(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, invalidOpException));

Following was the issue that was logged before: https://aspnetwebstack.codeplex.com/workitem/1318

Problem

This Web API action returns an HTTP 500 (Internal Server Error) status code: ``` public IHttpActionResult Post() { return InternalServerError(); } ``` But this action returns an HTTP 400 (Bad Request) status code: ``` public IHttpActionResult Post() { return InternalServerError(new Exception()); } ``` I would expect both actions to return a 500 status code and the second action puts some of the error's details in the response body. My first thought is that this is a bug but I wanted to get some other input. Is there any good reason why a 400 should be returned in the second action instead of a 500? UPDATE: The documentation on this method reads: Creates an System.Web.Http.Results.ExceptionResult (500 Internal Server Error) with the specified exception. I'm thinking more and more this is a bug.

Original source