无法以编程方式为 Azure 存储中的 blob 容器设置权限

And*_*y S 2 permissions azure azure-storage azure-storage-blobs

使用 创建一个 blob 容器后CreateIfNotExists(),我立即调用SetPermissions()以允许用户公开访问容器中的 blob,但不允许访问容器本身。

像这样:

CloudBlobContainer pdfContainer = blobClient.GetContainerReference(ContainerName.PDFs);

if (pdfContainer.CreateIfNotExists())
    pdfContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });
Run Code Online (Sandbox Code Playgroud)

容器创建成功,但是当我登录到 Azure 门户时,blob 容器权限是Private.

我是否错过了提交权限更改的额外调用?我看过的例子似乎都没有表明这一点,我也没有在文档中看到任何内容。我正在使用 Azure SDK 的 v2.0。

更新:

看起来CreateIfNotExists()总是返回false。我在 Reflector 中打开了该程序集,发现它捕获了 (409) Conflict HTTP 错误并吞下了异常。这似乎是 SDK 或服务器端 REST 实现的问题。即使容器不存在并且容器创建成功,服务器仍然返回409。

似乎最好的办法是暂时调用CreateIfNotExists()并忽略返回值。

此外,没有必要在调用GetPermissions()之前调用SetPermissions()

Fab*_*ino 6

这对我有用(我在应用程序启动时运行它):

var blobContainer = GetPhotoBlobContainer();  
blobContainer.CreateIfNotExists();  
var perm = new BlobContainerPermissions();  
perm.PublicAccess = BlobContainerPublicAccessType.Blob;  
blobContainer.SetPermissions(perm); 
Run Code Online (Sandbox Code Playgroud)