【问题标题】:Different behaviour of "Microsoft.WindowsAzure.Storage.Blob" and "Microsoft.Azure.Storage.Blob"“Microsoft.WindowsAzure.Storage.Blob”和“Microsoft.Azure.Storage.Blob”的不同行为
【发布时间】:2019-12-16 22:13:52
【问题描述】:

我正在编写一个需要访问 Azure Blob 存储的 .NET Azure Function App。 Microsoft 提供库 Microsoft.WindowsAzure.StorageMicrosoft.Azure.Storage.Blob 正是为此目的,而 Microsoft.Azure.Storage.Blob 是更新的库,因此应该使用。但是行为似乎有所不同,我不明白为什么或我需要做不同的事情。

在使用 Microsoft.Azure.Storage.Blob 时,我不断收到 StorageExceptions 指代错误的 Http 标头,而旧包中不会出现这种情况。

这是一个代码 sn-p,通常应该与两个库一起使用:

var blobStorageAccount = CloudStorageAccount.Parse("{connectionString}");
var blobClient = blobStorageAccount.CreateCloudBlobClient();
var blobContainer = blobClient.GetContainerReference("container123");
var exists = await blobContainer.ExistsAsync();

输出应该为真或假,与Microsoft.WindowsAzure.Storage 完美配合但与Microsoft.Azure.Storage.Blob 完美配合,我不断收到StorageExceptions 消息“HTTP 标头之一的值格式不正确”。当ExistsAsync() 方法被调用时。 CloudBlobClient 的创建在两个库中都可以正常工作。

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

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

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

【问题讨论】:

  • 它的功能是v2吗?

标签: .net azure azure-blob-storage


【解决方案1】:

我启动了一个干净的控制台应用程序 (.NET Core) 并按照以下步骤操作:

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

结果:一切正常。

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

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

在我看来,您有一个带有 SAS 令牌的连接字符串,不允许您检查容器是否存在。

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

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

【讨论】:

  • 考虑到使用不同 SDK 工作的相同代码,我认为这不是问题。
猜你喜欢
  • 2021-01-18
  • 2021-02-03
  • 2021-03-09
  • 2016-05-19
  • 2011-10-18
  • 2012-02-04
  • 2018-03-12
  • 1970-01-01
  • 2020-01-11
相关资源
最近更新 更多