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

时间:2013-05-15 17:30:10

标签: azure permissions azure-storage-blobs azure-storage

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

像这样:

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

if (pdfContainer.CreateIfNotExists())
    pdfContainer.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });

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

我是否错过了额外调用以提交权限更改?我看过的所有例子都没有显示出来,我也没有在文档中看到任何内容。我正在使用Azure SDK的v2.0。

更新

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

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

此外,在致电GetPermissions()之前无需致电SetPermissions()

2 个答案:

答案 0 :(得分:4)

这对我有用(我在app启动时运行):

var blobContainer = GetPhotoBlobContainer();  
blobContainer.CreateIfNotExists();  
var perm = new BlobContainerPermissions();  
perm.PublicAccess = BlobContainerPublicAccessType.Blob;  
blobContainer.SetPermissions(perm); 

答案 1 :(得分:0)

您可以通过CloudBlobContainer.GetPermissions检索容器权限,也可以创建新的容器权限,然后设置BlobContainerPermissions.PublicAccess属性。

BlobContainerPermissions perms = pdfContainer.GetPermissions(); // get existing permissions
perms.PublicAccess = BlobContainerPublicAccessType.Blob; // blob public access
pdfContainer.SetPermissions(perms);

// or create new permissions
BlobContainerPermissions perms =  new BlobContainerPermissions();
perms.PublicAccess = BlobContainerPublicAccessType.Blob; // blob public access
pdfContainer.SetPermissions(perms);