Dot-Net

GetBlobReferenceFromServer 不適用於相對 URI。錯誤:“只允許使用絕對地址”

  • May 27, 2014

我正在將 Azure 儲存從 1.7 SDK 升級到 2.3 SDK,並且一直在更新我的GetBlobReference(string)呼叫GetBlockReferenceFromServer(Uri)

過去我一直在使用相對 URI,但是當我將它們傳遞給我時,GetBlockReferenceFromServer 我得到一個錯誤,說我不能使用絕對 URI(見下面的堆棧)

範常式式碼:

Dim myAccount As CloudStorageAccount = CloudStorageAccount.Parse(connectionString)
Dim myClient As CloudBlobClient = myAccount.CreateCloudBlobClient()
Dim myRelativeUri As New Uri("mycontainer/myblob.txt", UriKind.Relative)
Dim myBlobref As ICloudBlob = myClient.GetBlobReferenceFromServer(myRelativeUri) <- Errors on this line

錯誤堆棧:

System.ArgumentException: Address 'mycontainer/myblob.txt' is a relative address. Only absolute addresses are permitted.Parameter name: uri   
at Microsoft.WindowsAzure.Storage.StorageUri.AssertAbsoluteUri(Uri uri)   
at Microsoft.WindowsAzure.Storage.StorageUri.set_PrimaryUri(Uri value)   
at Microsoft.WindowsAzure.Storage.StorageUri..ctor(Uri primaryUri, Uri secondaryUri)   
at Microsoft.WindowsAzure.Storage.StorageUri..ctor(Uri primaryUri)   
at Microsoft.WindowsAzure.Storage.Blob.CloudBlobClient.GetBlobReferenceFromServer(Uri blobUri, AccessCondition accessCondition, BlobRequestOptions options, OperationContext operationContext)   at MySoftware.MyReference...

我不明白為什麼 Uri 在必須工作時必須是絕對CloudBlobClientBaseUriBaseUri在嘗試獲取參考之前,我 是否必須手動添加on?

技術參考中對此沒有任何內容。

有沒有人可以使用相對 URI GetBlobReferenceFromServer?我從根本上做錯了什麼嗎?

感謝您的回饋意見。GetBlobReferenceFromServer 需要絕對 URI,因為它是為特定場景設計的,在這種場景中,使用者只有一個指向 blob 的 URI,並且需要獲取其 blob 類型才能開始使用它。

如果您知道 blob 的類型,我強烈建議您使用 GetContainerReference,然後使用 GetBlockBlobReference 或 GetPageBlobReference,因為這些方法不必呼叫 Azure 儲存服務來獲取 blob 類型。因此,它們將降低成本並提高性能。它們還直接使用 blob 名稱,而不是 URI。

引用自:https://stackoverflow.com/questions/23828109