web-dev-qa-db-fra.com

Comment déterminer un état de réponse 404 lors de l'utilisation de HttpClient.GetAsync ()

J'essaie de déterminer la response retournée par la méthode HttpClient de GetAsync dans le cas d'erreurs 404 en utilisant C # et .NET 4.5.

À l'heure actuelle, je peux seulement dire qu'une erreur s'est produite plutôt que l'état de l'erreur, comme 404 ou le délai d'expiration.

Actuellement mon code mon code ressemble à ceci:

    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()  );                
        }
    }

Mon problème est que je ne suis pas en mesure de gérer l'exception et de déterminer son statut et d'autres détails sur ce qui n'a pas fonctionné.

Comment gérer correctement l'exception et interpréter les erreurs qui se sont produites?

29
Gga

Vous pouvez simplement vérifier la propriété StatusCode de la réponse:

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
            );
        }
    }
}
45
Darin Dimitrov