.net protal WindowsAzure.Storage v2 StorageException




protal azure (3)

我只是試了一下,驚訝地發現ExtendedErrorInformation對象的確是空的。 然而它並不總是空的。 例如,如果我嘗試使用blobContainer.Create()方法創建一個已經存在的blob容器,我將得到一個非空的ExtendedErrorInformation。 但是,如果我嘗試並獲取Blob容器中不存在的blob的屬性,我會得到一個空的ExtendedErrorInformation對象。 我想不能只是假設ExtendedErrorInformation對象將始終可用。

另外我注意到,在你的代碼為2.0,你正在使用StorageErrorCodeStrings。 請注意,它已從2.0版中刪除,並且僅在版本1.8或之前提供。 以為我應該提到這一點

更新:請參閱以下評論從@VollmonD。 這已添加到版本2.0.3中。

我正在從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
    }
}

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

看起來很簡單。 問題是ExtendedErrorInformation始終等於null。 HttpStatusMessage反而說'指定的blob不存在',因為它應該。

我認為這是由測試環境的模擬器引起的,但是在真正的Azure環境中嘗試它卻使我遇到了同樣的情況。

任何想法?


晚了,但如果你試圖處理從blob刪除項目或只是檢查它們是否存在(擴展方法有點辦法)。 你現在可以使用:

點擊這裡查看CloudBlob上的方法列表: https ://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.cloudblockblob.aspx


另一種選擇是查看RequestInformation.HttpStatusCode 。 無論如何,這似乎更可靠。 您的代碼很容易轉換為:

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




azure-storage