GetBlobReferenceFromServer不使用相对URI.错误:"只允许使用绝对地址"

ale*_*rgy 7 .net vb.net azure azure-storage azure-storage-blobs

我正在将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
Run Code Online (Sandbox Code Playgroud)

错误堆栈:

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...
Run Code Online (Sandbox Code Playgroud)

我不明白为什么当CloudBlobClient有一个BaseUri工作时,Uri必须是绝对的.BaseUri在尝试获取参考之前,是否必须先手动添加?

关于此,技术参考中没有任何内容.

有没有人有相关的URI可以使用GetBlobReferenceFromServer?有什么东西我从根本上做错了吗?

Ser*_*ler 11

感谢您的反馈意见.GetBlobReferenceFromServer需要绝对URI,因为它是为特定场景设计的,其中用户只有blob的URI并且需要获取其blob类型甚至开始使用它.

如果您知道blob的类型,我强烈建议使用GetContainerReference,然后使用GetBlockBlobReference或GetPageBlobReference,因为这些方法不必调用Azure存储服务来获取blob类型.因此,它们可以降低成本并提高性能.它们也直接与blob名称一起工作,而不是URI.