1

我已经开始在 blobContainer.createIfNotExists 上收到 403 错误。以下是源代码。

 CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
        string blobContainerName =string.IsNullOrEmpty(_sessionContext.DomainName) ? "localdevblob": _sessionContext.DomainName.ToLower();
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference(blobContainerName);
        container.CreateIfNotExists();

已验证的事情:

  • 容器名称为小写并符合标准
  • 本地 blob 存储可在存储资源管理器中访问,并且可以正常读取/上传内容
  • 连接字符串为: add key="StorageConnectionString" value="UseDevelopmentStorage=true"

预计升级库可能会解决问题:

  • 将存储模拟器升级到 5.2
  • 将 Nuget 包 WindowsAzure.Storage 升级到 8.4.0(之前是 8.1.0,但已经报错了)

异常截图如下:

在此处输入图像描述

更新

显然,我刚刚从https://github.com/Azure-Samples/storage-blob-dotnet-getting-started.git下载了示例,这也可以。当我比较我的项目和示例项目中的 cloudBlobClient 对象时,我发现出于某种奇怪的原因,我发现 blobClient(在我的项目中)缺少“AuthenticationHandler”和可能导致问题的“Key”。但是这两个值存在于示例项目中。

在此处输入图像描述

4

1 回答 1

3

在 blobContainer.createIfNotExists 上出现 403 错误

我创建了一个示例来重现我这边的问题,该代码适用于将WindowsAzure.Storage sdk v8.1.0安装到v8.1.4v8.4.0

CloudStorageAccount storageAccount = CloudStorageAccount.Parse("UseDevelopmentStorage=true");

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

CloudBlobContainer container = blobClient.GetContainerReference("mycontainer");

container.CreateIfNotExists();

而且我还用 WindowsAzure.Storage v7.0.0 测试了代码,它也可以工作。

此外,一些社区成员报告如果在项目中安装了ApplicationInsights ,WindowsAzure.Storage sdk 在执行存储操作时返回 403 错误,此SO 线程对此进行了讨论。

于 2017-08-31T06:25:11.123 回答