问题可能是由于SAS token的失效导致的。可以使用以下代码重新生成SAS:
//获取容器引用
CloudBlobContainer container = GetCloudBlobContainer();
//获取Blob引用
CloudBlockBlob blockBlob = container.GetBlockBlobReference("image.jpg");
//创建一个只读的非过期的访问SAS token
string sasToken = blockBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(2),
Permissions = SharedAccessBlobPermissions.Read
});
//构建好完整的SAS Url
string imageUrl = blockBlob.Uri + sasToken;
如果SAS token仍然有效,则问题可能是缓存导致的。可以将缓存控制设置为no-store来解决问题:
//获取Blob引用
CloudBlockBlob blockBlob = container.GetBlockBlobReference("image.jpg");
//创建一个只读的非过期的访问SAS token
string sasToken = blockBlob.GetSharedAccessSignature(new SharedAccessBlobPolicy()
{
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(2),
Permissions = SharedAccessBlobPermissions.Read
});
//构建好完整的SAS Url
string imageUrl = blockBlob.Uri + sasToken;
//将Blob返回给客户端
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
Response.Cache.SetNoStore();
return File(imageUrl, "image/jpeg");