【发布时间】:2015-01-13 13:15:03
【问题描述】:
我有一个包含如下代码的 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 状态和无原因短语。该任务永远不会引发异常。任务(代码 sn-p 中的响应变量)的状态为“运行到完成”。结果没有任何迹象表明实际问题 - 无论是网络故障、服务器无法访问等。
在 URL 指向不存在或无法访问的服务器、套接字连接被拒绝等情况下,如何捕获更有意义的错误? SendAsync 不应该为这种情况抛出特定的异常吗?
FWIW,客户端代码使用 VS 2013 更新 3 内置到 PCL 库中,并在 Windows Phone 模拟器中运行,使用来自 NuGet 的 System.Net.Http 2.2.28
【问题讨论】:
-
CreateHttpRequest是做什么的?也许它正在创建一个合法地获得 404 而不是其他预期类型的错误的请求。你有示例方法、uri 等吗? -
如果
SendAsync失败,得到 404 是没有意义的。这是您的实际代码吗? -
从我的实际代码中简化;我简化的只是构建 HttpRequestMessage 的代码 - 添加内容和标题
-
我认为您必须在响应上调用
EnsureSuccessStatusCode才能引发异常。 API 并未表明 404 之类的响应会以其他方式抛出。 -
@CoryNelson 我明白了。我读得太快了,所以标题有点误导。
标签: c# windows-phone-8 portable-class-library