我正在编写一个需要访问Azure Blob存储的.NET Azure功能应用程序。 Microsoft正是出于此目的提供了库Microsoft.WindowsAzure.Storage
和Microsoft.Azure.Storage.Blob
,而Microsoft.Azure.Storage.Blob
是应该使用的最新库。但是行为似乎有所不同,我不明白为什么或需要做不同的事情。
在使用Microsoft.Azure.Storage.Blob
时,我不断收到指向错误的Http标头的StorageExceptions,这在旧版程序包中是没有的。
下面是一个代码段,通常应同时在两个库中使用:
var blobStorageAccount = CloudStorageAccount.Parse("{connectionString}");
var blobClient = blobStorageAccount.CreateCloudBlobClient();
var blobContainer = blobClient.GetContainerReference("container123");
var exists = await blobContainer.ExistsAsync();
输出应该为true或false,与Microsoft.WindowsAzure.Storage
完美搭配,但与Microsoft.Azure.Storage.Blob
完美搭配,我继续获取StorageExceptions并显示以下消息:“ HTTP标头之一的值不正确格式。”调用ExistsAsync()
方法时。 CloudBlobClient的创建在两个库中都可以正常工作。
显然有一个简单的解决方案-使用旧软件包。但这并不能令人满意,因为我想使用最新的库。
有人遇到过类似的问题吗?
编辑: 我肯定在其他地方犯了另一个错误。我再次转向新库,它突然起作用了。我猜我搞砸了,真的要更改代码所有类中的所有引用。
答案 0 :(得分:0)
我启动了一个干净的控制台应用程序(.NET Core),并遵循以下步骤:
Main
中(并使其成为async Task
)结果:它工作正常。
我想我们需要更多信息,尽管我确实有一些想法:
给我的感觉就像您有一个带有SAS令牌的连接字符串,该字符串不允许您检查容器是否存在。
编辑
我只是检查了带有SAS令牌的连接字符串,该令牌没有在容器级别具有权限。这会引发异常消息:
该请求无权使用此资源类型执行此操作。