次の方法で共有


共有キー承認を使用して REST API 操作を呼び出す

この記事では、C# を使用して承認された REST 要求を作成して、Azure Storage REST API 操作を呼び出す方法について説明します。 Blob Storage の REST API 操作を呼び出す方法を学習したら、他の Azure Storage REST 操作にも同様の手順を使用できます。

[前提条件]

サンプル アプリケーションでは、ストレージ アカウントの BLOB コンテナーが一覧表示されます。 この記事のコードを試すには、次のものが必要です。

  • Visual Studio をインストールし、Azure 開発ワークロードを含めます。 この例は、Visual Studio 2019 を使用してビルドされました。 別のバージョンを使用する場合、ガイダンスは若干異なる場合があります。

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

  • 汎用ストレージ アカウント。 ストレージ アカウントをまだ持っていない場合は、「ストレージ アカウント の作成」を参照してください。

  • この記事の例では、ストレージ アカウント内のコンテナーを一覧表示する方法を示します。 出力を表示するには、開始する前にストレージ アカウントにいくつかの BLOB コンテナーを追加します。

サンプル アプリケーションをダウンロードする

サンプル アプリケーションは、C# で記述されたコンソール アプリケーションです。

git を使用して、アプリケーションのコピーを開発環境にダウンロードします。

git clone https://github.com/Azure-Samples/storage-dotnet-rest-api-with-auth.git

このコマンドは、リポジトリをローカル git フォルダーに複製します。 Visual Studio ソリューションを開くには、storage-dotnet-rest-api-with-auth フォルダーに移動し、StorageRestApiAuth.slnを開きます。

REST について

Representational State Transfer (REST) は、HTTP/HTTPS などのインターネット プロトコルを介してサービスを操作できるアーキテクチャです。 REST は、サーバーまたはクライアントで実行されているソフトウェアとは無関係です。 REST API は、HTTP/HTTPS をサポートする任意のプラットフォームから呼び出すことができます。 Mac、Windows、Linux、Android フォンまたはタブレット、iPhone、iPod、または Web サイトで実行されるアプリケーションを作成し、それらのプラットフォームすべてに同じ REST API を使用できます。

REST API の呼び出しは、クライアントによって行われた要求と、サービスによって返される応答で構成されます。 要求では、呼び出す操作、操作するリソース、クエリ パラメーターとヘッダー、および呼び出された操作に応じて、データのペイロードに関する情報を含む URL を送信します。 サービスからの応答には、状態コード、応答ヘッダーのセット、および呼び出された操作に応じて、データのペイロードが含まれます。

サンプル アプリケーションについて

サンプル アプリケーションでは、ストレージ アカウント内のコンテナーが一覧表示されます。 REST API ドキュメントの情報が実際のコードとどのように関連しているかを理解すると、他の REST 呼び出しを理解しやすくなります。

Blob Service REST API を見ると、BLOB ストレージに対して実行できるすべての操作が表示されます。 ストレージ クライアント ライブラリは REST API のラッパーであるため、REST API を直接使用せずにストレージ リソースに簡単にアクセスできます。 ただし、ストレージ クライアント ライブラリの代わりに REST API を使用したい場合もあります。

コンテナーの一覧表示操作

この記事では、 コンテナーの一覧表示 操作について説明します。 次の情報は、要求と応答のフィールドの一部を理解するのに役立ちます。

要求メソッド: GET。 この動詞は、要求オブジェクトのプロパティとして指定する HTTP メソッドです。 この動詞のその他の値には、呼び出している API に応じて HEAD、PUT、DELETE が含まれます。

要求 URI: https://myaccount.blob.core.windows.net/?comp=list。 要求 URI は、BLOB ストレージ アカウント エンドポイント https://myaccount.blob.core.windows.net とリソース文字列 /?comp=listから作成されます。

URI パラメーター: ListContainers を呼び出すときに使用できる追加のクエリ パラメーターがあります。 これらのパラメーターの 2 つは、フィルター処理に使用される呼び出しの タイムアウト (秒単位) と プレフィックスです。

もう 1 つの便利なパラメーターは maxresults です。この値よりも多くのコンテナーが使用可能な場合、応答本文には、次の要求で返される次のコンテナーを示す NextMarker 要素が含まれます。 この機能を使用するには、次の要求を行うときに、URI のマーカー パラメーターとして NextMarker 値を指定します。 この機能を使用する場合は、結果を順にめくるような感じです。

追加のパラメーターを使用するには、次の例のように、リソース文字列に値を追加します。

/?comp=list&timeout=60&maxresults=100

要求ヘッダー: このセクションでは、必須の要求ヘッダーと省略可能な要求ヘッダーの一覧を示します。 3 つのヘッダーが必要です。 Authorization ヘッダー、 x-ms-date (要求の UTC 時刻を含む)、 x-ms-version (使用する REST API のバージョンを指定します)。 ヘッダーに x-ms-client-request-id を含めることは任意です。 このフィールドの値は何でも設定でき、ログ記録が有効になるとストレージ分析ログに書き込まれます。

要求本文: ListContainers の要求本文はありません。 要求本文は、SetContainerAccessPolicy を含む BLOB のアップロード時にすべての PUT 操作で使用されます。 要求本文を使用すると、適用する格納されているアクセス ポリシーの XML リストを送信できます。 保存されているアクセス ポリシーについては、 Shared Access Signature (SAS) の使用に関する記事で説明されています。

応答状態コード: 知る必要がある状態コードを示します。 この例では、HTTP 状態コード 200 で問題ありません。 HTTP 状態コードの完全な一覧については、「 状態コードの定義」を参照してください。 ストレージ REST API に固有のエラー コードを確認するには、一般的な REST API エラー コードを参照してください。

応答ヘッダー:これにはコンテンツ タイプが含まれます。 x-ms-request-id。これは渡した要求 ID です。使用された BLOB サービスのバージョンを示す x-ms-version。と 日付。これは UTC で、要求が行われた時刻を示します。

応答本文: このフィールドは、要求されたデータを提供する XML 構造体です。 この例では、応答はコンテナーとそのプロパティの一覧です。

REST 要求の作成

運用環境で実行する場合は、常に HTTP ではなく HTTPS を使用してください。 この演習では、要求と応答のデータを表示できるように HTTP を使用します。 実際の REST 呼び出しで要求と応答の情報を表示するには、 Fiddler または同様のアプリケーションをダウンロードします。 Visual Studio ソリューションでは、ストレージ アカウント名とキーがクラスにハードコーディングされます。 ListContainersAsyncREST メソッドは、REST 要求のさまざまなコンポーネントを作成するために使用されるメソッドに、ストレージ アカウント名とストレージ アカウント キーを渡します。 実際のアプリケーションでは、ストレージ アカウント名とキーは構成ファイル、環境変数内に存在するか、Azure Key Vault から取得されます。

このサンプル プロジェクトでは、Authorization ヘッダーを作成するためのコードは別のクラスにあります。 この考え方は、クラス全体を取得して独自のソリューションに追加し、それを "そのまま" 使用できるということです。Authorization ヘッダー コードは、Azure Storage に対するほとんどの REST API 呼び出しで機能します。

HttpRequestMessage オブジェクトである要求をビルドするには、Program.csの ListContainersAsyncREST に移動します。 要求をビルドする手順は次のとおりです。

  • サービスの呼び出しに使用する URI を作成します。
  • HttpRequestMessage オブジェクトを作成し、ペイロードを設定します。 ペイロードは ListContainersAsyncREST に対して null です。これは、何も渡していないためです。
  • x-ms-date および x-ms-version の要求ヘッダーを追加します。
  • 承認ヘッダーを取得して追加します。

必要な基本情報を次に示します。

  • ListContainers の場合、 メソッドGET。 この値は、要求をインスタンス化するときに設定されます。
  • リソースは、どの API が呼び出されているかを示す URI のクエリ部分であるため、値は/?comp=list。 前述のように、リソースは ListContainers API に関する情報を示すリファレンス ドキュメント ページにあります。
  • URI は、そのストレージ アカウントの BLOB サービス エンドポイントを作成し、リソースを連結することによって構築されます。 要求 URI の値がhttp://contosorest.blob.core.windows.net/?comp=listされます。
  • ListContainers の場合、 requestBody は null であり、追加 のヘッダーはありません。

ifMatch など、渡すパラメーターが API によって異なる場合があります。 PutBlob を呼び出すときに ifMatch を使用する場合の例を示します。 その場合、ifMatch を eTag に設定すると、指定した eTag が BLOB の現在の eTag と一致する場合にのみ BLOB が更新されます。 他のユーザーが eTag の取得後に BLOB を更新した場合、その変更はオーバーライドされません。

最初に、 urirequestPayloadを設定します。

// 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;

次に、要求をインスタンス化し、メソッドを GET に設定し、URI を指定します。

// Instantiate the request message with a null payload.
using (var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, uri)
{ Content = (requestPayload == null) ? null : new ByteArrayContent(requestPayload) })
{

x-ms-datex-ms-versionの要求ヘッダーを追加します。 コード内のこの場所では、呼び出しに必要な要求ヘッダーを追加することもできます。 この例では、追加のヘッダーはありません。 追加のヘッダーを渡す API の例として、コンテナー ACL の設定操作があります。 この API 呼び出しでは、"x-ms-blob-public-access" という名前のヘッダーとアクセス レベルの値が追加されます。

// 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.

承認ヘッダーを作成するメソッドを呼び出し、それを要求ヘッダーに追加します。 承認ヘッダーは、この記事の後半で作成されます。 メソッド名は GetAuthorizationHeader です。このコード スニペットで確認できます。

// Get the authorization header and add it.
httpRequestMessage.Headers.Authorization = AzureStorageAuthenticationHelper.GetAuthorizationHeader(
    storageAccountName, storageAccountKey, now, httpRequestMessage);

この時点で、 httpRequestMessage には、承認ヘッダーで完了した REST 要求が含まれます。

要求を送信する

要求を作成したら、SendAsync メソッドを呼び出して Azure Storage に送信できます。 応答状態コードの値が 200 であることを確認します。これは、操作が成功したことを意味します。 次に、応答を解析します。 この場合は、コンテナーの XML リストを取得します。 GetRESTRequest メソッドを呼び出して要求を作成し、要求を実行し、応答でコンテナーの一覧を調べるコードを見てみましょう。

    // 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);
            }
        }
    }
}

SendAsync の呼び出しを行うとき に Fiddler などのネットワーク スニファを実行すると、要求と応答の情報を確認できます。 見てみましょう。 ストレージ アカウントの名前は contosorest です

要求:

GET /?comp=list HTTP/1.1

要求ヘッダー:

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

実行後に返される状態コードと応答ヘッダー:

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

応答本文 (XML): コンテナーの一覧表示操作では、コンテナーとそのプロパティの一覧が表示されます。

<?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>

要求を作成し、サービスを呼び出し、結果を解析する方法を理解したので、承認ヘッダーを作成する方法を見てみましょう。

承認ヘッダーの作成

ヒント

Azure Storage では、BLOB とキューの Microsoft Entra 統合がサポートされています。 Microsoft Entra ID は、Azure Storage への要求を承認するためのはるかに簡単なエクスペリエンスを提供します。 Microsoft Entra ID を使用して REST 操作を承認する方法の詳細については、「 Microsoft Entra ID を使用した承認」を参照してください。 Microsoft Entra と Azure Storage の統合の概要については、「 Microsoft Entra ID を使用して Azure Storage へのアクセスを認証する」を参照してください。

承認の概念の詳細については、「 Azure Storage への要求を承認する」を参照してください。

その記事を要点に絞り、コードを表示しましょう。

まず、共有キーの承認を使用します。 承認ヘッダーの形式は次のようになります。

Authorization="SharedKey <storage account name>:<signature>"  

署名フィールドは、要求から作成され、SHA256 アルゴリズムを使用して計算された後、Base64 エンコードを使用してエンコードされたハッシュベースのメッセージ認証コード (HMAC) です。

次のコード スニペットは、Shared Key Signature 文字列の形式を示しています。

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;  

Blob Storage の場合は、VERB、md5、コンテンツの長さ、正規化されたヘッダー、正規化されたリソースを指定します。 この例では他の項目は空白のままにしておくことができますが、\n を入力して空であることを示してください。

正規化は、複数の表現を持つデータを標準化するプロセスです。 この場合は、ヘッダーとリソースを標準化します。 正規化されたヘッダーは、"x-ms-" で始まるヘッダーです。 正規化されたリソースは、ストレージ アカウント名とすべてのクエリ パラメーター ( ?comp=list など) を含むリソースの URI です。 正規化されたリソースには、 timeout=60などの追加のクエリ パラメーターも含まれます。

Authorization ヘッダーを作成する必要があるため、2 つの正規化されたフィールドから始めましょう。

正規化されたヘッダー

この値を作成するには、"x-ms-" で始まるヘッダーを取得し、それらを並べ替え、 [key:value\n] インスタンスの文字列に書式設定し、1 つの文字列に連結します。 この例では、正規化されたヘッダーは次のようになります。

x-ms-date:Fri, 17 Nov 2017 00:44:48 GMT\nx-ms-version:2017-07-29\n

その出力を作成するために使用されるコードを次に示します。

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();
}

正規化されたリソース

署名文字列のこの部分は、要求の対象となるストレージ アカウントを表します。 Request URI がhttp://contosorest.blob.core.windows.net/?comp=list、実際のアカウント名がこの場合contosorestであることに注意してください。 この例では、次が返されます。

/contosorest/\ncomp:list

クエリ パラメーターがある場合、この例にはそれらのパラメーターも含まれます。 追加のクエリ パラメーターと複数の値を持つクエリ パラメーターも処理するコードを次に示します。 このコードは、すべての REST API で動作するようにビルドしていることを忘れないでください。 ListContainers メソッドですべてを必要としない場合でも、すべての可能性を含める必要があります。

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();
}

正規化された文字列が設定されたので、承認ヘッダー自体を作成する方法を見てみましょう。 最初に、この記事で既に表示した StringToSign の形式でメッセージ署名の文字列を作成します。 この概念は、コードでコメントを使用して説明する方が簡単なので、ここでは Authorization ヘッダーを返す最後のメソッドです。

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;
}

このコードを実行すると、結果の MessageSignature は次の例のようになります。

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

AuthorizationHeader の最終的な値を次に示します。

SharedKey contosorest:Ms5sfwkA8nqTRw7Uury4MPHqM6Rj2nfgbYNvUKOa67w=

AuthorizationHeader は、応答を投稿する前に要求ヘッダーに配置された最後のヘッダーです。

これは、Storage Services REST API を呼び出す要求を作成できるクラスをまとめるために知る必要があるすべてを対象としています。

例: BLOB を一覧表示する

コンテナー コンテナー 1 の BLOB リスト操作を呼び出すコードを変更する方法を見てみましょう。 このコードは、コンテナーを一覧表示するコードとほぼ同じです。唯一の違いは URI と応答の解析方法です。

ListBlobs のリファレンス ドキュメントを見ると、メソッドは GET で、RequestURI は次のようになります。

https://myaccount.blob.core.windows.net/container-1?restype=container&comp=list

ListContainersAsyncREST で、URI を ListBlobs の API に設定するコードを変更します。 コンテナー名は container-1 です

String uri =
    string.Format("http://{0}.blob.core.windows.net/container-1?restype=container&comp=list",
      storageAccountName);

次に、応答を処理する場所で、コンテナーではなく BLOB を探すようにコードを変更します。

foreach (XElement container in x.Element("Blobs").Elements("Blob"))
{
    Console.WriteLine("Blob name = {0}", container.Element("Name").Value);
}

このサンプルを実行すると、次のような結果が得られます。

正規化されたヘッダー:

x-ms-date:Fri, 17 Nov 2017 05:16:48 GMT\nx-ms-version:2017-07-29\n

正規化されたリソース:

/contosorest/container-1\ncomp:list\nrestype:container

メッセージ署名:

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

承認ヘッダー:

SharedKey contosorest:uzvWZN1WUIv2LYC6e3En10/7EIQJ5X9KtFQqrZkxi6s=

Fiddler の値は次のとおりです。

要求:

GET http://contosorest.blob.core.windows.net/container-1?restype=container&comp=list HTTP/1.1

要求ヘッダー:

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

実行後に返される状態コードと応答ヘッダー:

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

応答本文 (XML): この XML 応答には、BLOB とそのプロパティの一覧が表示されます。

<?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>

概要

この記事では、BLOB ストレージ REST API に要求を行う方法について説明しました。 要求を使用すると、コンテナーの一覧またはコンテナー内の BLOB の一覧を取得できます。 REST API 呼び出しの承認署名を作成する方法と、REST 要求でそれを使用する方法について学習しました。 最後に、応答を調べる方法を学習しました。

次のステップ