我将我的代码从.NET 4.0类库迁移到PCL库(面向.NET 4.0和Windows 8)。
我遇到的一个问题是Microsoft没有为WebExceptionStatus.ProtocolError
API添加WebException
标记。
来源:http://msdn.microsoft.com/en-us/library/system.net.webexceptionstatus(v=vs.110).aspx
结果,我再也不能写这样的代码了:
try
{
// Get a response
return webRequest.GetResponse();
}
catch (WebException ex)
{
// Rethrow in case of transport errors (e.g. timeout)
if (ex.Status != WebExceptionStatus.ProtocolError)
{
throw;
}
// Else, return the response anyway
return ex.Response;
}
真正令人困惑的是框架仍在内部使用此标志。您无法在客户端代码中使用它。
我现在能想到的唯一解决方法是将ex.Status
投射到int
并将其与ProtocolError
(7)的值进行比较。但是,如果他们改变了潜在的价值,那么代码就会破裂。
新的做法是什么?
编辑:我知道的解决方法......
按数值比较,如果不是7则抛出
const int ProtocolError = 7;
if ((int)ex.Status != ProtocolError)
{
throw;
}
检查是否有响应,如果为空则抛出
if (ex.Response == null)
{
throw;
}
感觉像我还缺少某些东西?