WindowsAzure.Storage v2 StorageException

Mat*_*uri 10 .net azure azure-storage

我正在从WindowsAzure.StorageClient 1.7迁移到WindowsAzure.Storage 2.0,我现在正在处理异常的管理.按照本指南和其他来源,我发现我必须从中迁移

try
{
    // Something
}
catch (StorageClientException e)
{
    switch (e.ErrorCode)
    {
        case StorageErrorCode.ContainerNotFound:
        case StorageErrorCode.ResourceNotFound:
        case StorageErrorCode.BlobNotFound:
        case StorageErrorCode.ConditionFailed:
            // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

try
{
    // Something
}
catch (StorageException e)
{
    switch (e.RequestInformation.ExtendedErrorInformation.ErrorCode)
    {
        case StorageErrorCodeStrings.ContainerNotFound:
        case StorageErrorCodeStrings.ResourceNotFound:
        case BlobErrorCodeStrings.BlobNotFound:
        case StorageErrorCodeStrings.ConditionNotMet:
            // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来很简单 问题是ExtendedErrorInformation总是等于null.相反,HttpStatusMessage表示"指定的blob不存在.",应该如此.

我认为它是由测试环境的模拟器引起的,但是在真实的Azure环境中尝试它会让我陷入同样的​​境地.

任何的想法?

Bri*_*chl 8

另一个选择是看看RequestInformation.HttpStatusCode.无论如何,这似乎更可靠.您的代码很容易翻译为:

try
{
    // Something
}
catch (StorageException e)
{
    switch (e.RequestInformation.HttpStatusCode)
    {
        case (int)HttpStatusCode.NotFound:
        case (int)HttpStatusCode.PreconditionFailed:
        // Do something
    }
}
Run Code Online (Sandbox Code Playgroud)


Gau*_*tri 3

我刚刚尝试了一下,惊讶地发现 ExtendedErrorInformation 对象确实为 null。然而它并不总是为空。例如,如果我尝试使用 blobContainer.Create() 方法创建一个已经存在的 Blob 容器,我将得到一个非空的 ExtendedErrorInformation。但是,如果我尝试获取 Blob 容器中不存在的 Blob 属性,我将得到一个 null ExtendedErrorInformation 对象。我想人们不能仅仅假设 ExtendedErrorInformation 对象始终可用。

我还注意到,在 2.0 的代码中,您使用的是 StorageErrorCodeStrings。请注意,它已从 2.0 版本中删除,仅适用于 1.8 或更早版本。我想我应该提一下

更新:请参阅下面来自 @VollmonD 的评论。这是在2.0.3版本中添加的。