I'm trying to return appropriate Http codes and responses from my application but I am struggling. It seems that there are 2 ways to return specific http responses.
The way I want to deal with it is by throwing a HttpResponseException
:
public Information Get(int apiKey)
{
if (!_users.Authenticate(apiKey))
{
var response = new HttpResponseMessage();
response.StatusCode = (HttpStatusCode)401;
response.ReasonPhrase = "ApiKey invalid";
throw new HttpResponseException(response);
}
return _info.Get();
}
However, when I do this the response I see is just an empty 200 response!
It also seems that you can also change the signature of your action method to return a HttpResponseMessage
like this:
public HttpResponseMessage Get()
{
if (!_users.Authenticate(apiKey))
{
return Request.CreateResponse((HttpStatusCode) 401, "ApiKey invalid");
}
return Request.CreateResponse((HttpStatusCode) 200, _info.Get());
}
I really don't want to do this if I can help it, I would much rather have my return type as the object I am trying to retrieve rather than wrapping it every time in a HttpResponseMessage
.
Is there a reason why the first method is returning an empty 200 rather than the 401 with the message as I want it to?
Two possible solutions;
First. Make sure your IIS is configured to let errors pass through
<configuration>
<system.webServer>
<httpErrors existingResponse="PassThrough" />
</system.webServer>
</configuration>
Second. I am not entirely sure, but ASP.NET Web API may require you to develop a custom ActionFilter to properly translate Exceptions to result types. This is the way I personally do error handling in Web API:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With