区分HttpClient请求失败类型

Gab*_* S. 9 .net c# http http-status-codes dotnet-httpclient

我需要编写代码来处理使用HttpClient.Net Framework 4.5附带的对象发出HTTP请求后可能出现的两种不同类型的故障:

  1. 连接失败,当由于连接问题而无法访问服务器时 - 例如没有可用连接,超时到期,网络设置不正确等.

  2. 虽然技术上并非失败,但是请求成功到达服务器但服务器以HTTP错误状态代码(例如404,400,409,500等)响应的情况

一种失败类型不被视为另一种失败是非常重要的.这是正确可靠的方法吗?该EnsureSuccessStatusCode()方法似乎至少有助于第二种情况,但文档令人失望.

Gab*_* S. 12

经过一些手动测试后,好消息是似乎有一种可靠的方法来分离这两种类型的错误,但坏消息是它在所有平台上都不一致 - 至少在Windows Phone 8上没有. Net Framework 4.5 Full和Windows Store App类型的项目,以下代码可以解决问题:

        try
        {
            var response = await httpClient.PostAsync(uri, content);

            if (!response.IsSuccessStatusCode)
            {
                // handle the second type of error (404, 400, etc.)
            }
        }
        catch (HttpRequestException ex)
        {
            // handle the first type of error (no connectivity, etc)
        }
Run Code Online (Sandbox Code Playgroud)

不幸的是,在Windows Phone 8上,两种类型都在以下if条件下处理:IsSuccessStatusCode设置为false并且不HttpRequestException引发(或任何其他异常).对于WP8,我正在使用HttpClient(http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclient-for-net-framework-and-windows-phone的可移植类库实现.aspx),我问他们这种不一致是否可以修复,希望它可以而且很快就会出现.