Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperlihatkan cara memanggil operasi REST API Azure Storage dengan membuat permintaan REST resmi menggunakan C#. Setelah mempelajari cara memanggil operasi REST API untuk Blob Storage, Anda dapat menggunakan langkah serupa untuk operasi Azure Storage REST lainnya.
Prasyarat
Aplikasi sampel mencantumkan kontainer blob untuk akun penyimpanan. Untuk mencoba kode dalam artikel ini, Anda memerlukan item berikut:
Instal Visual Studio dan sertakan beban kerja pengembangan Azure . Contoh ini dibuat menggunakan Visual Studio 2019. Jika Anda menggunakan versi yang berbeda, panduan mungkin sedikit berbeda.
Langganan Azure. Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Anda memulai.
Akun penyimpanan tujuan umum. Jika Anda belum memiliki akun penyimpanan, lihat Membuat akun penyimpanan.
Contoh dalam artikel ini menunjukkan cara mencantumkan kontainer di akun penyimpanan. Untuk melihat output, tambahkan beberapa kontainer blob ke akun penyimpanan sebelum Anda memulai.
Mengunduh aplikasi contoh
Aplikasi sampel adalah aplikasi konsol yang ditulis dalam C#.
Gunakan git untuk mengunduh salinan aplikasi ke lingkungan pengembangan Anda.
git clone https://github.com/Azure-Samples/storage-dotnet-rest-api-with-auth.git
Perintah ini mengkloning repositori ke folder git lokal Anda. Untuk membuka solusi Visual Studio, navigasikan ke folder storage-dotnet-rest-api-with-auth dan buka StorageRestApiAuth.sln.
Tentang REST
Representational State Transfer (REST) adalah arsitektur yang memungkinkan Anda berinteraksi dengan layanan melalui protokol internet, seperti HTTP/HTTPS. REST tidak bergantung pada perangkat lunak yang berjalan di server atau klien. REST API dapat dipanggil dari platform apa pun yang mendukung HTTP/HTTPS. Anda dapat menulis aplikasi yang berjalan di Mac, Windows, Linux, ponsel atau tablet Android, iPhone, iPod, atau situs web, dan menggunakan REST API yang sama untuk semua platform tersebut.
Panggilan ke REST API terdiri dari permintaan yang dibuat oleh klien, dan respons yang dikembalikan oleh layanan. Dalam permintaan, Anda mengirimkan URL dengan informasi mengenai operasi yang ingin dipanggil dan sumber daya yang akan digunakan. Selain itu, sertakan parameter kueri dan header yang diperlukan. Bergantung pada operasi yang dipanggil, Anda mungkin juga perlu menyertakan payload data. Respons dari layanan tersebut mencakup kode status, sekumpulan header respons, dan tergantung pada operasi yang dipanggil, sebuah payload data.
Tentang aplikasi sampel
Aplikasi sampel mencantumkan kontainer di akun penyimpanan. Setelah Anda memahami bagaimana informasi dalam dokumentasi REST API berkorelasi dengan kode aktual Anda, panggilan REST lainnya lebih mudah dipahami.
Jika Anda melihat BLob Service REST API, Anda akan melihat semua operasi yang dapat Anda lakukan pada penyimpanan blob. Pustaka klien penyimpanan adalah pembungkus di sekitar REST API, sehingga memudahkan untuk mengakses sumber daya penyimpanan tanpa menggunakan REST API secara langsung. Namun, terkadang, Anda mungkin ingin menggunakan REST API alih-alih pustaka klien penyimpanan.
Operasi Daftar Kontainer
Artikel ini berfokus pada operasi Daftar Kontainer . Informasi berikut membantu Anda memahami beberapa bidang dalam permintaan dan respons.
Metode Permintaan: GET. Kata kerja ini adalah metode HTTP yang Anda tentukan sebagai properti objek permintaan. Nilai lain untuk kata kerja ini termasuk HEAD, PUT, dan DELETE, tergantung pada API yang Anda panggil.
Meminta URI: https://myaccount.blob.core.windows.net/?comp=list. URI permintaan dibuat dari endpoint akun penyimpanan blob https://myaccount.blob.core.windows.net dan string sumber daya /?comp=list.
Parameter URI: Ada parameter kueri tambahan yang dapat Anda gunakan saat memanggil ListContainers. Beberapa parameter dari ini adalah waktu habis untuk panggilan (dalam detik) dan awalan, yang digunakan untuk pemfilteran.
Parameter bermanfaat lainnya adalah maxresults: jika lebih banyak kontainer tersedia daripada nilai ini, isi respons akan berisi elemen NextMarker yang menunjukkan kontainer berikutnya untuk kembali pada permintaan berikutnya. Untuk menggunakan fitur ini, Anda memberikan nilai NextMarker sebagai parameter penanda di URI saat Anda membuat permintaan berikutnya. Saat menggunakan fitur ini, ini seperti membalik halaman dari hasil.
Untuk menggunakan parameter tambahan, tambahkan ke string sumber daya dengan nilai , seperti contoh ini:
/?comp=list&timeout=60&maxresults=100
Header Permintaan: Bagian ini mencantumkan header permintaan yang diperlukan dan opsional. Tiga header diperlukan: header Otorisasi , x-ms-date (berisi waktu UTC untuk permintaan), dan versi x-ms (menentukan versi REST API yang akan digunakan). Menyertakan x-ms-client-request-id di header bersifat opsional. Anda dapat mengatur nilai untuk bidang ini ke apa pun, dan ditulis ke log analitik penyimpanan saat pengelogan diaktifkan.
Isi Permintaan: Tidak ada isi permintaan untuk ListContainers. Isi Permintaan digunakan pada semua operasi PUT saat mengunggah blob, termasuk SetContainerAccessPolicy. Isi Permintaan memungkinkan Anda mengirim daftar XML kebijakan akses tersimpan untuk diterapkan. Kebijakan akses tersimpan dibahas dalam artikel Menggunakan Tanda Tangan Akses Bersama (SAS).
Kode Status Respons: Memberi tahu kode status apa pun yang perlu Anda ketahui. Dalam contoh ini, kode status HTTP 200 tidak apa-apa. Untuk daftar lengkap kode status HTTP, lihat Definisi Kode Status. Untuk melihat kode kesalahan khusus untuk STORAGE REST API, lihat Kode kesalahan REST API umum
Header Respons: Ini termasuk Tipe Konten; x-ms-request-id, yang merupakan ID permintaan yang Anda berikan; x-ms-version, yang menunjukkan versi layanan Blob yang digunakan; dan Tanggal, yang ada di UTC dan memberi tahu jam berapa permintaan dibuat.
Isi Respons: Bidang ini adalah struktur XML yang menyediakan data yang diminta. Dalam contoh ini, responsnya adalah daftar kontainer dan propertinya.
Membuat permintaan REST
Untuk keamanan saat berjalan dalam produksi, selalu gunakan HTTPS daripada HTTP. Untuk tujuan latihan ini, kami menggunakan HTTP sehingga Anda dapat melihat data permintaan dan respons. Untuk melihat informasi permintaan dan respons dalam panggilan REST yang sebenarnya, Anda dapat mengunduh Fiddler atau aplikasi serupa. Dalam solusi Visual Studio, nama dan kunci akun penyimpanan dikodekan secara permanen di kelas . Metode ListContainersAsyncREST meneruskan nama akun penyimpanan dan kunci akun penyimpanan ke metode yang digunakan untuk membuat berbagai komponen permintaan REST. Dalam aplikasi dunia nyata, nama dan kunci akun penyimpanan akan berada dalam file konfigurasi, variabel lingkungan, atau diambil dari Azure Key Vault.
Dalam proyek sampel kami, kode untuk membuat header Otorisasi berada di kelas terpisah. Idenya adalah bahwa Anda dapat mengambil seluruh kelas dan menambahkannya ke solusi Anda sendiri dan menggunakannya "apa adanya." Kode header Otorisasi berfungsi untuk sebagian besar panggilan REST API ke Azure Storage.
Untuk membuat permintaan, yang merupakan objek HttpRequestMessage, buka ListContainersAsyncREST di Program.cs. Langkah-langkah untuk membangun permintaan adalah:
- Buat URI yang akan digunakan untuk memanggil layanan.
- Buat objek HttpRequestMessage dan atur payload. Payload adalah null untuk ListContainersAsyncREST karena kami tidak mengirimkan apa pun.
- Tambahkan header permintaan untuk x-ms-date dan x-ms-version.
- Dapatkan header otorisasi dan tambahkan.
Beberapa informasi dasar yang Anda butuhkan:
- Untuk ListContainers, metodenya adalah
GET. Nilai ini diatur saat menginstansiasi contoh permintaan. -
Sumber daya adalah bagian kueri dari URI yang menunjukkan API mana yang dipanggil, sehingga nilainya adalah
/?comp=list. Seperti disebutkan sebelumnya, sumber daya ada di halaman dokumentasi referensi yang menunjukkan informasi tentang LISTContainers API. - URI dibangun dengan membuat titik akhir layanan Blob untuk akun penyimpanan tersebut dan menggabungkan sumber daya. Nilai untuk URI permintaan akhirnya adalah
http://contosorest.blob.core.windows.net/?comp=list. - Untuk ListContainers, requestBody null dan tidak ada header tambahan.
API yang berbeda mungkin memiliki parameter lain untuk diteruskan seperti ifMatch. Contoh tempat Anda dapat menggunakan ifMatch adalah saat memanggil PutBlob. Dalam hal ini, Anda mengatur ifMatch ke eTag, dan hanya memperbarui blob jika eTag yang Anda berikan cocok dengan eTag saat ini pada blob. Jika orang lain telah memperbarui blob sejak mengambil eTag, perubahan mereka tidak akan tergantikan.
Pertama, atur uri dan requestPayload.
// Construct the URI. It will look like this:
// https://myaccount.blob.core.windows.net/resource
String uri = string.Format("http://{0}.blob.core.windows.net?comp=list", storageAccountName);
// Provide the appropriate payload, in this case null.
// we're not passing anything in.
Byte[] requestPayload = null;
Selanjutnya, buat instans permintaan, atur metode ke GET dan berikan URI.
// Instantiate the request message with a null payload.
using (var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, uri)
{ Content = (requestPayload == null) ? null : new ByteArrayContent(requestPayload) })
{
Tambahkan header permintaan untuk x-ms-date dan x-ms-version. Tempat dalam kode ini juga tempat Anda menambahkan header permintaan tambahan yang diperlukan untuk panggilan. Dalam contoh ini, tidak ada header tambahan. Contoh API yang menyertakan header tambahan adalah operasi Mengatur ACL Kontainer. Panggilan API ini menambahkan header yang disebut "x-ms-blob-public-access" dan nilai untuk tingkat akses.
// Add the request headers for x-ms-date and x-ms-version.
DateTime now = DateTime.UtcNow;
httpRequestMessage.Headers.Add("x-ms-date", now.ToString("R", CultureInfo.InvariantCulture));
httpRequestMessage.Headers.Add("x-ms-version", "2017-07-29");
// If you need any additional headers, add them here before creating
// the authorization header.
Panggil metode yang membuat header otorisasi dan tambahkan ke header permintaan. Header otorisasi akan dibuat kemudian dalam artikel ini. Nama metode adalah GetAuthorizationHeader, yang dapat Anda lihat dalam cuplikan kode ini:
// Get the authorization header and add it.
httpRequestMessage.Headers.Authorization = AzureStorageAuthenticationHelper.GetAuthorizationHeader(
storageAccountName, storageAccountKey, now, httpRequestMessage);
Pada titik ini, httpRequestMessage berisi permintaan REST lengkap dengan header otorisasi.
Mengirim permintaan
Setelah membuat permintaan, Anda dapat memanggil metode SendAsync untuk mengirimkannya ke Azure Storage. Periksa apakah nilai kode status respons adalah 200, yang berarti bahwa operasi telah berhasil. Selanjutnya, uraikan respons. Dalam hal ini, Anda mendapatkan daftar kontainer XML. Mari kita lihat kode untuk memanggil metode GetRESTRequest untuk membuat permintaan, menjalankan permintaan, lalu memeriksa respons untuk daftar kontainer.
// Send the request.
using (HttpResponseMessage httpResponseMessage =
await new HttpClient().SendAsync(httpRequestMessage, cancellationToken))
{
// If successful (status code = 200),
// parse the XML response for the container names.
if (httpResponseMessage.StatusCode == HttpStatusCode.OK)
{
String xmlString = await httpResponseMessage.Content.ReadAsStringAsync();
XElement x = XElement.Parse(xmlString);
foreach (XElement container in x.Element("Containers").Elements("Container"))
{
Console.WriteLine("Container name = {0}", container.Element("Name").Value);
}
}
}
}
Jika Anda menjalankan sniffer jaringan seperti Fiddler saat melakukan panggilan ke SendAsync, Anda dapat melihat informasi permintaan dan respons. Mari kita lihat. Nama akun penyimpanan adalah contosorest.
Minta:
GET /?comp=list HTTP/1.1
Header Permintaan:
x-ms-date: Thu, 16 Nov 2017 23:34:04 GMT
x-ms-version: 2014-02-14
Authorization: SharedKey contosorest:1dVlYJWWJAOSHTCPGiwdX1rOS8B4fenYP/VrU0LfzQk=
Host: contosorest.blob.core.windows.net
Connection: Keep-Alive
Kode status dan header respons dikembalikan setelah eksekusi:
HTTP/1.1 200 OK
Content-Type: application/xml
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 3e889876-001e-0039-6a3a-5f4396000000
x-ms-version: 2017-07-29
Date: Fri, 17 Nov 2017 00:23:42 GMT
Content-Length: 1511
Isi respons (XML): Untuk operasi Daftar Kontainer, ini menunjukkan daftar kontainer dan propertinya.
<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults
ServiceEndpoint="http://contosorest.blob.core.windows.net/">
<Containers>
<Container>
<Name>container-1</Name>
<Properties>
<Last-Modified>Thu, 16 Mar 2017 22:39:48 GMT</Last-Modified>
<Etag>"0x8D46CBD5A7C301D"</Etag>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
</Properties>
</Container>
<Container>
<Name>container-2</Name>
<Properties>
<Last-Modified>Thu, 16 Mar 2017 22:40:50 GMT</Last-Modified>
<Etag>"0x8D46CBD7F49E9BD"</Etag>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
</Properties>
</Container>
<Container>
<Name>container-3</Name>
<Properties>
<Last-Modified>Thu, 16 Mar 2017 22:41:10 GMT</Last-Modified>
<Etag>"0x8D46CBD8B243D68"</Etag>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
</Properties>
</Container>
<Container>
<Name>container-4</Name>
<Properties>
<Last-Modified>Thu, 16 Mar 2017 22:41:25 GMT</Last-Modified>
<Etag>"0x8D46CBD93FED46F"</Etag>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
</Properties>
</Container>
<Container>
<Name>container-5</Name>
<Properties>
<Last-Modified>Thu, 16 Mar 2017 22:41:39 GMT</Last-Modified>
<Etag>"0x8D46CBD9C762815"</Etag>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
</Properties>
</Container>
</Containers>
<NextMarker />
</EnumerationResults>
Sekarang setelah Anda memahami cara membuat permintaan, memanggil layanan, dan mengurai hasilnya, mari kita lihat cara membuat header otorisasi.
Membuat header otorisasi
Nasihat / Petunjuk
Azure Storage mendukung integrasi Microsoft Entra untuk blob dan antrean. ID Microsoft Entra menawarkan pengalaman yang jauh lebih sederhana untuk mengotorisasi permintaan ke Azure Storage. Untuk informasi selengkapnya tentang menggunakan ID Microsoft Entra untuk mengotorisasi operasi REST, lihat Mengotorisasi dengan ID Microsoft Entra. Untuk gambaran umum integrasi Microsoft Entra dengan Azure Storage, lihat Mengautentikasi akses ke Azure Storage menggunakan ID Microsoft Entra.
Untuk mempelajari selengkapnya tentang konsep otorisasi, lihat Mengotorisasi permintaan ke Azure Storage.
Mari kita menyaring artikel itu menjadi yang benar-benar diperlukan dan tunjukkan kodenya.
Pertama, gunakan otorisasi Kunci Bersama. Format header otorisasi terlihat seperti ini:
Authorization="SharedKey <storage account name>:<signature>"
Bidang tanda tangan adalah Kode Autentikasi Pesan berbasis Hash (HMAC) yang dibuat dari permintaan dan dihitung menggunakan algoritma SHA256, lalu dikodekan menggunakan pengodean Base64.
Cuplikan kode ini menunjukkan format string tanda tangan Kunci Bersama:
StringToSign = VERB + "\n" +
Content-Encoding + "\n" +
Content-Language + "\n" +
Content-Length + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
If-Modified-Since + "\n" +
If-Match + "\n" +
If-None-Match + "\n" +
If-Unmodified-Since + "\n" +
Range + "\n" +
CanonicalizedHeaders +
CanonicalizedResource;
Untuk penyimpanan Blob, Anda menentukan VERB, md5, panjang konten, Header Kanonis, dan Sumber Daya Kanonis. Anda dapat membiarkan yang lain kosong untuk contoh ini, tetapi masukkan \n untuk menunjukkan bahwa mereka kosong.
Kanonisisasi adalah proses standardisasi data yang memiliki lebih dari satu representasi yang mungkin. Dalam hal ini, Anda menstandarkan header dan sumber daya. Header kanonis adalah header yang dimulai dengan "x-ms-". Sumber daya kanonis adalah URI sumber daya, termasuk nama akun penyimpanan dan semua parameter kueri (seperti ?comp=list). Sumber daya kanonis juga menyertakan parameter kueri tambahan yang mungkin telah Anda tambahkan, seperti timeout=60, misalnya.
Mari kita mulai dengan dua bidang kanonis, karena bidang tersebut diperlukan untuk membuat header Otorisasi.
Header yang dikononisasi
Untuk membuat nilai ini, ambil header yang dimulai dengan "x-ms-" dan urutkan, lalu format ke dalam satu string yang terdiri dari instans [key:value\n], yang digabungkan menjadi satu string. Untuk contoh ini, header kanonis terlihat seperti ini:
x-ms-date:Fri, 17 Nov 2017 00:44:48 GMT\nx-ms-version:2017-07-29\n
Berikut adalah kode yang digunakan untuk membuat output tersebut:
private static string GetCanonicalizedHeaders(HttpRequestMessage httpRequestMessage)
{
var headers = from kvp in httpRequestMessage.Headers
where kvp.Key.StartsWith("x-ms-", StringComparison.OrdinalIgnoreCase)
orderby kvp.Key
select new { Key = kvp.Key.ToLowerInvariant(), kvp.Value };
StringBuilder headersBuilder = new StringBuilder();
foreach (var kvp in headers)
{
headersBuilder.Append(kvp.Key);
char separator = ':';
// Get the value for each header, strip out \r\n if found, then append it with the key.
foreach (string headerValue in kvp.Value)
{
string trimmedValue = headerValue.TrimStart().Replace("\r\n", string.Empty);
headersBuilder.Append(separator).Append(trimmedValue);
// Set this to a comma; this will only be used
// if there are multiple values for one of the headers.
separator = ',';
}
headersBuilder.Append("\n");
}
return headersBuilder.ToString();
}
Sumber daya kanonis
Bagian string tanda tangan ini mewakili akun penyimpanan yang ditargetkan oleh permintaan. Ingatlah bahwa URI Permintaan adalah http://contosorest.blob.core.windows.net/?comp=list, dengan nama akun aktual (contosorest dalam hal ini). Dalam contoh ini, demikian hasilnya:
/contosorest/\ncomp:list
Jika Anda memiliki parameter kueri, contoh ini juga menyertakan parameter tersebut. Berikut adalah kode, yang juga menangani parameter kueri tambahan dan parameter kueri dengan beberapa nilai. Ingatlah bahwa Anda membangun kode ini untuk bekerja untuk semua REST API. Anda ingin menyertakan semua kemungkinan, bahkan jika metode ListContainers tidak memerlukan semuanya.
private static string GetCanonicalizedResource(Uri address, string storageAccountName)
{
// The absolute path will be "/" because for we're getting a list of containers.
StringBuilder sb = new StringBuilder("/").Append(storageAccountName).Append(address.AbsolutePath);
// Address.Query is the resource, such as "?comp=list".
// This ends up with a NameValueCollection with 1 entry having key=comp, value=list.
// It will have more entries if you have more query parameters.
NameValueCollection values = HttpUtility.ParseQueryString(address.Query);
foreach (var item in values.AllKeys.OrderBy(k => k))
{
sb.Append('\n').Append(item.ToLower()).Append(':').Append(values[item]);
}
return sb.ToString();
}
Sekarang setelah string kanonis diatur, mari kita lihat cara membuat header otorisasi itu sendiri. Anda mulai dengan membuat string tanda tangan pesan dalam format StringToSign yang sebelumnya ditampilkan dalam artikel ini. Konsep ini lebih mudah dijelaskan menggunakan komentar dalam kode, jadi di sinilah, metode akhir yang mengembalikan Header Otorisasi:
internal static AuthenticationHeaderValue GetAuthorizationHeader(
string storageAccountName, string storageAccountKey, DateTime now,
HttpRequestMessage httpRequestMessage, string ifMatch = "", string md5 = "")
{
// This is the raw representation of the message signature.
HttpMethod method = httpRequestMessage.Method;
String MessageSignature = String.Format("{0}\n\n\n{1}\n{5}\n\n\n\n{2}\n\n\n\n{3}{4}",
method.ToString(),
(method == HttpMethod.Get || method == HttpMethod.Head) ? String.Empty
: httpRequestMessage.Content.Headers.ContentLength.ToString(),
ifMatch,
GetCanonicalizedHeaders(httpRequestMessage),
GetCanonicalizedResource(httpRequestMessage.RequestUri, storageAccountName),
md5);
// Now turn it into a byte array.
byte[] SignatureBytes = Encoding.UTF8.GetBytes(MessageSignature);
// Create the HMACSHA256 version of the storage key.
HMACSHA256 SHA256 = new HMACSHA256(Convert.FromBase64String(storageAccountKey));
// Compute the hash of the SignatureBytes and convert it to a base64 string.
string signature = Convert.ToBase64String(SHA256.ComputeHash(SignatureBytes));
// This is the actual header that will be added to the list of request headers.
AuthenticationHeaderValue authHV = new AuthenticationHeaderValue("SharedKey",
storageAccountName + ":" + signature);
return authHV;
}
Saat Anda menjalankan kode ini, MessageSignature yang dihasilkan terlihat seperti contoh ini:
GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Fri, 17 Nov 2017 01:07:37 GMT\nx-ms-version:2017-07-29\n/contosorest/\ncomp:list
Berikut adalah nilai akhir untuk AuthorizationHeader:
SharedKey contosorest:Ms5sfwkA8nqTRw7Uury4MPHqM6Rj2nfgbYNvUKOa67w=
AuthorizationHeader adalah header terakhir yang ditempatkan di header permintaan sebelum memposting respons.
Itu mencakup semua yang perlu Anda ketahui untuk menyusun kelas tempat Anda dapat membuat permintaan untuk memanggil REST API Layanan Penyimpanan.
Contoh: Mencantumkan blob
Mari kita lihat cara mengubah kode untuk memanggil operasi List Blobs untuk kontainer kontainer-1. Kode ini hampir identik dengan kode untuk mencantumkan kontainer, satu-satunya perbedaan adalah URI dan bagaimana Anda mengurai respons.
Jika Anda melihat dokumentasi referensi untuk ListBlobs, Anda menemukan bahwa metodenya adalah GET dan RequestURI adalah:
https://myaccount.blob.core.windows.net/container-1?restype=container&comp=list
Di ListContainersAsyncREST, ubah kode yang menetapkan URI ke API untuk ListBlobs. Nama kontainer adalah container-1.
String uri =
string.Format("http://{0}.blob.core.windows.net/container-1?restype=container&comp=list",
storageAccountName);
Kemudian di mana Anda menangani respons, ubah kode untuk mencari blob alih-alih kontainer.
foreach (XElement container in x.Element("Blobs").Elements("Blob"))
{
Console.WriteLine("Blob name = {0}", container.Element("Name").Value);
}
Saat menjalankan sampel ini, Anda mendapatkan hasil seperti berikut ini:
Header yang telah dikononisasi:
x-ms-date:Fri, 17 Nov 2017 05:16:48 GMT\nx-ms-version:2017-07-29\n
Sumber daya kanonis:
/contosorest/container-1\ncomp:list\nrestype:container
Tanda tangan pesan:
GET\n\n\n\n\n\n\n\n\n\n\n\nx-ms-date:Fri, 17 Nov 2017 05:16:48 GMT
\nx-ms-version:2017-07-29\n/contosorest/container-1\ncomp:list\nrestype:container
Header otorisasi:
SharedKey contosorest:uzvWZN1WUIv2LYC6e3En10/7EIQJ5X9KtFQqrZkxi6s=
Nilai berikut berasal dari Fiddler:
Minta:
GET http://contosorest.blob.core.windows.net/container-1?restype=container&comp=list HTTP/1.1
Header Permintaan:
x-ms-date: Fri, 17 Nov 2017 05:16:48 GMT
x-ms-version: 2017-07-29
Authorization: SharedKey contosorest:uzvWZN1WUIv2LYC6e3En10/7EIQJ5X9KtFQqrZkxi6s=
Host: contosorest.blob.core.windows.net
Connection: Keep-Alive
Kode status dan header respons dikembalikan setelah eksekusi:
HTTP/1.1 200 OK
Content-Type: application/xml
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 7e9316da-001e-0037-4063-5faf9d000000
x-ms-version: 2017-07-29
Date: Fri, 17 Nov 2017 05:20:21 GMT
Content-Length: 1135
Isi respons (XML): Respons XML ini memperlihatkan daftar blob dan propertinya.
<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults
ServiceEndpoint="http://contosorest.blob.core.windows.net/" ContainerName="container-1">
<Blobs>
<Blob>
<Name>DogInCatTree.png</Name>
<Properties><Last-Modified>Fri, 17 Nov 2017 01:41:14 GMT</Last-Modified>
<Etag>0x8D52D5C4A4C96B0</Etag>
<Content-Length>419416</Content-Length>
<Content-Type>image/png</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-MD5 />
<Cache-Control />
<Content-Disposition />
<BlobType>BlockBlob</BlobType>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
<ServerEncrypted>true</ServerEncrypted>
</Properties>
</Blob>
<Blob>
<Name>GuyEyeingOreos.png</Name>
<Properties>
<Last-Modified>Fri, 17 Nov 2017 01:41:14 GMT</Last-Modified>
<Etag>0x8D52D5C4A25A6F6</Etag>
<Content-Length>167464</Content-Length>
<Content-Type>image/png</Content-Type>
<Content-Encoding />
<Content-Language />
<Content-MD5 />
<Cache-Control />
<Content-Disposition />
<BlobType>BlockBlob</BlobType>
<LeaseStatus>unlocked</LeaseStatus>
<LeaseState>available</LeaseState>
<ServerEncrypted>true</ServerEncrypted>
</Properties>
</Blob>
</Blobs>
<NextMarker />
</EnumerationResults>
Ringkasan
Dalam artikel ini, Anda mempelajari cara membuat permintaan ke REST API penyimpanan blob. Dengan permintaan tersebut, Anda dapat mengambil daftar kontainer atau daftar blob dalam kontainer. Anda mempelajari cara membuat tanda tangan otorisasi untuk panggilan REST API dan cara menggunakannya dalam permintaan REST. Akhirnya, Anda belajar cara memeriksa respons.