繁体   English   中英

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

[英]Can't programmatically set permissions to blob container in Azure Storage

在使用SetPermissions() 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()调用SetPermissions()

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

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

您可以通过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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM