I'm probably missing something obvious here.
I'm using HttpClient
which throws HttpRequestException
that contains StatusCode
in the Message string.
How can I access that StatusCode
?
Edit: More info, I wrote this question in rush.
I'm using HttpClient
to access another API within my WebApi project. Yes, I know why I'm calling EnsureSuccessStatusCode()
. I want to propagate some errors downstream such as 404 and 403.
All I wanted was to consistently transform HttpRequestException
into HttpResponseException
using custom ExceptionFilterAttribute
.
Unfortunately, HttpRequestException
does not carry any extra info I could use besides the message. I was hoping to uncover StatusCode
in raw (int or enum) form.
Looks like I can either:
- Use the message to switch the status code (bleh)
- Or create my version of EnsureSuccessStatusCode and throw exception that's actually usable.
Status code was passed as part of a string to
HttpRequestException
so that you cannot recover it from such exceptions alone.The design of
System.Net.Http
requires you to accessHttpResponseMessage.StatusCode
instead of waiting for the exception.http://msdn.microsoft.com/en-us/library/system.net.http.httpresponsemessage(v=vs.110).aspx
If you are now following the Microsoft guide, make sure you understand clearly why it asks you to call
HttpResponseMessage.EnsureSucessStatusCode
. If you don't call that function, there should be no exception.For what its worth, this guy did something clever: https://social.msdn.microsoft.com/Forums/vstudio/en-US/dc9bc426-1654-4319-a7fb-383f00b68def/c-httpresponsemessage-throws-exception-httprequestexception-webexception-the-remote-name?forum=csharpgeneral
In the case where I needed an exception status property, I can do this:
As mentioned by others as well it's not a good practice to get the StatusCode from HttpRequestException, the same can be done beforehand with HttpResponseMessage.StatusCode after checking HttpResponseMessage.IsSuccessStatusCode
Anyhow if due to some constraint/requirement one has to read StatusCode, There can be two solution
Below is the code in System.Net.Http.HttpResponseMessage Where SR.net_http_message_not_success_statuscode ="Response status code does not indicate success: {0} ({1})."
This has worked for me