I am trying to determine the response
returned by HttpClient
's GetAsync
method in the case of 404 errors using C# and .NET 4.5.
At present I can only tell that an error has occurred rather than the error's status such as 404 or timeout.
Currently my code my code looks like this:
static void Main(string[] args) { dotest("http://error.123"); Console.ReadLine(); } static async void dotest(string url) { HttpClient client = new HttpClient(); HttpResponseMessage response = new HttpResponseMessage(); try { response = await client.GetAsync(url); if (response.IsSuccessStatusCode) { Console.WriteLine(response.StatusCode.ToString()); } else { // problems handling here string msg = response.IsSuccessStatusCode.ToString(); throw new Exception(msg); } } catch (Exception e) { // .. and understanding the error here Console.WriteLine( e.ToString() ); } }
My problem is that I am unable to handle the exception and determine its status and other details of what went wrong.
How would I properly handle the exception and interpret what errors occurred?
The HTTP request is sent out, and HttpClient. GetAsync returns an uncompleted Task .
GetAsync(Uri, HttpCompletionOption) Send a GET request to the specified Uri with an HTTP completion option as an asynchronous operation. GetAsync(Uri, CancellationToken) Send a GET request to the specified Uri with a cancellation token as an asynchronous operation.
The property response.StatusCode
is a HttpStatusCode enum.
This is the code I use to get a friedly name
if (response != null) { int numericStatusCode = (int)response.StatusCode; // like: 503 (ServiceUnavailable) string friendlyStatusCode = $"{ numericStatusCode } ({ response.StatusCode })"; // ... }
Or when only errors should be reported
if (response != null) { int statusCode = (int)response.StatusCode; // 1xx-3xx are no real errors, while 3xx may indicate a miss configuration; // 9xx are not common but sometimes used for internal purposes // so probably it is not wanted to show them to the user bool errorOccured = (statusCode >= 400); string friendlyStatusCode = ""; if(errorOccured == true) { friendlyStatusCode = $"{ statusCode } ({ response.StatusCode })"; } // .... }
You could simply check the StatusCode
property of the response:
static async void dotest(string url) { using (HttpClient client = new HttpClient()) { HttpResponseMessage response = await client.GetAsync(url); if (response.IsSuccessStatusCode) { Console.WriteLine(response.StatusCode.ToString()); } else { // problems handling here Console.WriteLine( "Error occurred, the status code is: {0}", response.StatusCode ); } } }
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