単一の 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 文字列の形式はまったく同じです。他に何を試せばいいのかわからない