“ Microsoft.WindowsAzure.Storage.Blob”和“ Microsoft.Azure.Storage.Blob”的不同行为

时间:2019-08-09 07:39:35

标签: .net azure azure-storage-blobs

我正在编写一个需要访问Azure Blob存储的.NET Azure功能应用程序。 Microsoft正是出于此目的提供了库Microsoft.WindowsAzure.StorageMicrosoft.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的创建在两个库中都可以正常工作。

显然有一个简单的解决方案-使用旧软件包。但这并不能令人满意,因为我想使用最新的库。

有人遇到过类似的问题吗?

编辑: 我肯定在其他地方犯了另一个错误。我再次转向新库,它突然起作用了。我我搞砸了,真的要更改代码所有类中的所有引用。

1 个答案:

答案 0 :(得分:0)

我启动了一个干净的控制台应用程序(.NET Core),并遵循以下步骤:

  1. 将您的代码复制到Main中(并使其成为async Task
  2. 添加了对Microsoft.Azure.Storage.Blob(V 11.0.0)的引用
  3. 为我的一个存储帐户粘贴了一个连接字符串
  4. 运行控制台应用程序

结果:它工作正常。

我想我们需要更多信息,尽管我确实有一些想法:

  • 您使用的是“完整”连接字符串,还是带有SAS令牌的连接字符串?
  • 您是否拥有(正确的)存储帐户权限?

给我的感觉就像您有一个带有SAS令牌的连接字符串,该字符串不允许您检查容器是否存在。

编辑
我只是检查了带有SAS令牌的连接字符串,该令牌没有在容器级别具有权限。这会引发异常消息:

  

该请求无权使用此资源类型执行此操作。