Reputation: 4421
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?
Upvotes: 36
Views: 70180
Reputation: 2803
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 })";
}
// ....
}
Upvotes: 2
Reputation: 1038720
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
);
}
}
}
Upvotes: 60