如何在使用HttpClient.GetAsync()时确定404响应状态

时间:2013-02-01 12:13:01

标签: c# exception-handling httpclient .net-4.5 async-await

在使用C#和.NET 4.5发生404错误的情况下,我正在尝试确定response的{​​{1}}方法返回的HttpClient

目前我只能说出错误已经发生而不是错误的状态,例如404或超时。

目前我的代码我的代码如下:

GetAsync

我的问题是我无法处理异常并确定其状态以及出错的其他详细信息。

我如何正确处理异常并解释发生了什么错误?

2 个答案:

答案 0 :(得分:41)

您只需检查回复的StatusCode属性:

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

答案 1 :(得分:0)

属性response.StatusCode是一个HttpStatusCode枚举。

这是我用来为用户获取名字的代码

if(response != null)
{
    int numericStatusCode = (int)response.StatusCode;

    // like: 503 (ServiceUnavailable)
    string friendlyStatusCode = $"{ numericStatusCode } ({ response.StatusCode })";

    // ...

}

或者仅应报告错误

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

    // ....
}