假设处理http web响应异常的常规方式:
void BeginGetResponseCallback(IAsyncResult asyncResult)
{
try
{
var req = asyncResult.AsyncState as HttpWebRequest;
using (HttpWebResponse response = req.EndGetResponse(asyncResult) as HttpWebResponse)
{
...
}
}
catch (WebException we)
{
...
}
}
这里的问题是,如果服务器存在连接问题或服务器实际回复“未找到”状态,则可能会引发具有相同错误代码(“未找到”)的 WebException。这似乎是 HttpWebRequest 实现中的一个错误。
那么我们应该如何正确区分这些情况,即抛出的异常是“源自”客户端还是服务器?
Edit1:我在 Windows Phone 7.1 平台上运行此代码。
Edit2:建议的 WebException 的 Status 属性在 WP7 上几乎没有用,因为它总是设置为 UnknownError,即使它应该是 ProtocolError。WP7 上可能的 HttpWebRequest 实现错误?
Edit3:Silverlight 中 WebException.Status 的 MSDN 文档页面声明不支持 ProtocolError 枚举成员,所以这解释了它......虽然不知道为什么它不受支持。