9

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

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

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

一种故障类型不被视为另一种是非常重要的。哪种方法是正确和可靠的?该EnsureSuccessStatusCode()方法似乎至少对第二种情况有所帮助,但令人失望的是文档稀缺。

4

1 回答 1

13

经过一些手动测试后,好消息是似乎有一种可靠的方法可以区分这两种错误类型,但坏消息是它在所有平台上并非始终相同——至少在 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)
        }

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

于 2013-06-27T10:57:58.373 回答