0

我将以下代码更改为:

try
{
    blob.FetchAttributes();
}
catch (StorageClientException e)
{
    if (e.ErrorCode == StorageErrorCode.ResourceNotFound)
        ....
}

至:

try
{
    blob.FetchAttributes();
}
catch (StorageException e)
{
    if (e.RequestInformation.ExtendedErrorInformation.ErrorCode == StorageErrorCodeStrings.ResourceNotFound)
        ....
}

在我运行它之后,它给了我一个 NullException 因为:

e.RequestInformation.ExtendedErrorInformation = NULL,

e.RequestInformation.HTTPStatusMessage = "指定的 blob 不存在。"

e.RequestInformation.HTTPStatusCode = 404

我正在考虑测试 HttpStatusMessage,但我觉得这样做并不安全,因为消息可能会随着时间而改变,如果我想保持我原来的逻辑行为,任何人都可以帮助我在这种情况下我应该怎么做?

4

1 回答 1

1

旧库中的ErrorCode实际上与新库中的ErrorCode不同。旧库尝试根据异常类型、HTTP 状态码以及服务器返回的错误码(如果有)对错误进行分类。在某些情况下,这会导致更多的混乱,因为不同的错误被映射到StorageErrorCode的单个值。

因此,在 Azure 存储客户端库 2.0 中,旧的StorageErrorCode枚举不再存在。相反,我们要求用户直接检查 HTTP 状态代码。如果服务器返回响应正文,则可以包含更多信息,如状态和错误代码文章中所述。当此数据存在时,将相应地填充ErrorCode 。

在您的示例中,FetchAttributes发出一个Get Blob Properties请求,该请求不返回响应正文。这就是ExtendedErrorInformation为空的原因。

于 2013-03-26T23:59:52.043 回答