可移植类库中缺少WebExceptionStatus.ProtocolError标志

时间:2014-08-10 20:31:45

标签: c# .net httpwebrequest httpwebresponse

我将我的代码从.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;
}

感觉像我还缺少某些东西?

0 个答案:

没有答案