等待HttpClient.SendAsync在预期时不抛出异常

时间:2015-01-12 22:20:30

标签: c# windows-phone-8 portable-class-library

我有一个Windows Phone 8应用,其中包含以下代码:

using (var client = new HttpClient())
{
    var httpRequest = new HttpRequestMessage(method, uri);
    try
    {
        var response = client.SendAsync(httpRequest);
        var httpResponse = await response;
        if (httpResponse.IsSuccessStatusCode)
        {
            var result = await httpResponse.Content.ReadAsStringAsync();
            return result;
        }
        else
        {
            HandleError(httpResponse);
            return null;
        }
    }
    catch (Exception ex)
    {

        throw;
    }
}

如果客户端成功连接到服务器,我将获得预期的结果,包括所有适当的HTTP状态代码和原因短语。

如果客户端无法联系服务器(例如URL中的域/ IP /端口不正确),则等待任务在一段延迟后完成,具有404状态且没有原因短语。该任务永远不会抛出异常。任务(代码片段中的响应变量)的状态为“运行至完成”。结果没有任何表明实际问题 - 无论是网络故障,无法访问的服务器等等。

如果URL指向不存在或无法访问的服务器,拒绝套接字连接等,如何捕获更有意义的错误? SendAsync不应该为这种情况抛出特定的例外吗?

FWIW,使用VS 2013更新3将客户端代码内置到PCL库中,并使用NuGet的System.Net.Http 2.2.28在Windows Phone模拟器中运行

1 个答案:

答案 0 :(得分:1)

Windows Phone的.NET HttpClient实现与Desktop的实现(wininet与自定义堆栈)不同。如果您存在语义差异,这是您需要注意的不兼容性之一。

在我的简单测试中,我确实在手机模拟器上获得了ReasonPhrase“未找到”。此外,您可以看到Headers集合为空,而如果找到服务器并且实际返回了真实的404,则会有标题。