我有一个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模拟器中运行
答案 0 :(得分:1)
Windows Phone的.NET HttpClient
实现与Desktop的实现(wininet与自定义堆栈)不同。如果您存在语义差异,这是您需要注意的不兼容性之一。
在我的简单测试中,我确实在手机模拟器上获得了ReasonPhrase
“未找到”。此外,您可以看到Headers
集合为空,而如果找到服务器并且实际返回了真实的404,则会有标题。