经过一些手动测试后,好消息是似乎有一种可靠的方法可以区分这两种错误类型,但坏消息是它在所有平台上并非始终相同——至少在 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),我问他们是否可以修复这种不一致,希望它可以并且很快就会解决。