c# - SharedAccessBlobPolicy 在给定时间未过期 - AZURE

标签 c# azure azure-storage azure-blob-storage

关于Shared Access Signature的例子有很多。 ,但我仍然无法弄清楚我的代码有什么问题。

我想做的是,我试图为 blob 创建一个可下载链接并将其显示给用户。例子通常是关于如何让它保持活力。我正在寻找如何使其过期。

我能够创建可下载链接并且它正在工作,但它不会在给定时间过期。 我创建了一个 SharedAccessBlobPolicy 并设置了 SharedAccessExpiryTime 属性,但它没有按时过期。

例如,如果我设置为 5 分钟,则 30 分钟后它仍然可以工作。

SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
                     {                  
                      SharedAccessExpiryTime =  DateTime.UtcNow.AddMinutes(5),
                      Permissions = SharedAccessBlobPermissions.Read
                      };

这是我的代码:

string blobName = "test.txt"; //just for an example

CloudStorageAccount account = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("myConnectionString"));
CloudBlobClient client = account.CreateCloudBlobClient();  


// Build shared access signature
CloudBlobContainer container = client.GetContainerReference(ConfigurationManager.AppSettings.Get("myContainerReference"));
container.CreateIfNotExists();


////Get a reference to a blob within the container.

//Create a new stored access policy and define its constraints.
SharedAccessBlobPolicy sharedPolicy = new SharedAccessBlobPolicy()
                 {                  
                  SharedAccessExpiryTime =  DateTime.UtcNow.AddMinutes(5),
                  Permissions = SharedAccessBlobPermissions.Read
                  };


//Get the container's existing permissions.
BlobContainerPermissions permissions = new BlobContainerPermissions();

// The public access setting explicitly specifies that the container is private, 
// so that it can't be accessed anonymously.
permissions.PublicAccess = BlobContainerPublicAccessType.Off;

//Add the new policy to the container's permissions.
string policyName = "myPolicy";

permissions.SharedAccessPolicies.Clear();   
permissions.SharedAccessPolicies.Add(policyName,sharedPolicy);
container.SetPermissions(permissions);

CloudBlockBlob blob = container.GetBlockBlobReference(blobName);
string sasBlobToken = blob.GetSharedAccessSignature(null, policyName);  
string downloadLink = blob.Uri + sasBlobToken;

downloadLink 应该可以工作 5 分钟,但它永远不会消失。 (我打赌它会死,但只是不知道它什么时候死)

附注我不会在这里分享整个代码,仅供引用,没有调试错误或任何其他类型的错误。作为可下载链接,它工作得非常好。它只是不会在给定时间过期。

我不知道我错过了什么。感谢您的关注

最佳答案

我刚刚尝试过此操作,但该链接在 5 分钟后就过期了。请检查浏览器是否没有缓存该文件。如果是这种情况,那么您将继续看到这些文件,因为它们并不是在每次请求时都从存储服务中获取的。相反,它们仅由浏览器缓存提供。

关于c# - SharedAccessBlobPolicy 在给定时间未过期 - AZURE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23641266/

相关文章:

azure - CloudBlobDirectory 和在 Azure 存储中使用分隔符之间的区别?

azure - 如何将多域用户电子邮件添加到 Azure AD

c# - Azure 存储模拟器 - 动态配置 CORS 会引发服务器身份验证错误

c# - Xamarin for Android(Mono for Android)与原生 Android 开发相比如何?

c# - 遇到无效的根元素名称 'HTML'。 'root' 是唯一允许的根元素名称

azure - Azure 上的 ElasticSearch - 如何 Logstash 和安装插件?

wcf - Azure Active Directory 和 WCF

powershell - 从 VSTS 发布期间修改 Azure 应用服务 IP 安全性

c# - 将日期字符串转换为 DateTime 格式

c# - 使用枚举不符合 CLS