我正在尝试获取单个 blob 的共享访问签名,然后使用 REST api 下载 blob。但是,我总是收到禁止的 403 错误消息。在存储模拟器和云上。这是我的代码:
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("myConnectionStringHere...");
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference("containerName");
CloudBlob blob = container.GetBlobReference("blobName");
string sasToken = blob.GetSharedAccessSignature(new SharedAccessPolicy()
{
Permissions = SharedAccessPermission.Read,
SharedAccessExpiryTime = DateTime.UtcNow + TimeSpan.FromHours(24)
}
);
string completeUri = string.Format(CultureInfo.InvariantCulture, "{0}{1}", blob.Uri, sasToken);
// now use the uri to make the rest call and download
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(completeUri);
request.Method = "GET";
using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse())
{
using (Stream s = resp.GetResponseStream())
{
using (FileStream fs = new FileStream("test.jpg", FileMode.Create, FileAccess.Write))
{
byte[] buffer = new byte[8 * 1024];
int len;
while ((len = s.Read(buffer, 0, buffer.Length)) > 0)
{
fs.Write(buffer, 0, len);
}
}
}
}
调用 GetResponse 时,我不断收到 403 错误。任何帮助表示赞赏!
编辑:忘了提:我正在使用最新的 azure sdk (2.0)
编辑 2:我做了很多实验,发现了一个名为 Azure Management Studio 的工具。此工具能够创建 SAS 令牌。我这样做了,并将它与我的 REST 调用代码一起使用。这工作得很好,所以错误必须在我编写的令牌创建代码中。但是,sas 字符串的格式是完全一样的。我不知道还能尝试什么