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环境中尝试它会让我陷入同样的境地.
任何的想法?
另一个选择是看看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)
我刚刚尝试了一下,惊讶地发现 ExtendedErrorInformation 对象确实为 null。然而它并不总是为空。例如,如果我尝试使用 blobContainer.Create() 方法创建一个已经存在的 Blob 容器,我将得到一个非空的 ExtendedErrorInformation。但是,如果我尝试获取 Blob 容器中不存在的 Blob 属性,我将得到一个 null ExtendedErrorInformation 对象。我想人们不能仅仅假设 ExtendedErrorInformation 对象始终可用。
我还注意到,在 2.0 的代码中,您使用的是 StorageErrorCodeStrings。请注意,它已从 2.0 版本中删除,仅适用于 1.8 或更早版本。我想我应该提一下
更新:请参阅下面来自 @VollmonD 的评论。这是在2.0.3版本中添加的。
| 归档时间: |
|
| 查看次数: |
4630 次 |
| 最近记录: |