Azure CloudBlobContainer.CreateIfNotExists() 对本地开发抛出禁止 (403)
Azure CloudBlobContainer.CreateIfNotExists() throws Forbidden (403) on Local Development
我在 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 存储,并且可以正常读取/上传内容
- 连接字符串是:
添加键="StorageConnectionString"值="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",这将导致问题.但是这两个值存在于示例项目中。
getting 403 Error on blobContainer.createIfNotExists
我创建了一个示例来重现我这边的问题,代码可以很好地安装 WindowsAzure.Storage sdk
v8.1.0 到 v8.1.4 和 v8.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 returns 403 错误,这SO thread 讨论过。
我在 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 存储,并且可以正常读取/上传内容
- 连接字符串是: 添加键="StorageConnectionString"值="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",这将导致问题.但是这两个值存在于示例项目中。
getting 403 Error on blobContainer.createIfNotExists
我创建了一个示例来重现我这边的问题,代码可以很好地安装 WindowsAzure.Storage sdk
v8.1.0 到 v8.1.4 和 v8.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 returns 403 错误,这SO thread 讨论过。