Call REST API operations with Shared Key authorization

Ez a cikk bemutatja, hogyan hívhat meg egy Azure Storage REST API-műveletet egy engedélyezett REST-kérés C# használatával történő létrehozásával. Miután megtanulta, hogyan hívhat meg REST API-műveletet a Blob Storage-hoz, hasonló lépéseket használhat bármely más Azure Storage REST-művelethez.

Előfeltételek

A mintaalkalmazás felsorolja a tárfiók blobtárolóinak listáját. A cikkben szereplő kód kipróbálásához a következő elemekre van szüksége:

  • Telepítse a Visual Studiót, és foglalja bele az Azure fejlesztési számítási feladatát. Ez a példa a Visual Studio 2019 használatával készült. Ha másik verziót használ, az útmutató kissé eltérhet.

  • Azure-előfizetés. Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.

  • Általános célú tárfiók. Ha még nincs tárfiókja, olvassa el a Tárfiók létrehozása című témakört.

  • A cikkben szereplő példa bemutatja, hogyan listázhatja a tárolókat egy tárfiókban. A kimenet megtekintéséhez vegyen fel néhány blobtárolót a tárfiókba a kezdés előtt.

A mintaalkalmazás letöltése

A mintaalkalmazás egy C#-ban írt konzolalkalmazás.

A git használatával töltse le az alkalmazás egy másolatát a fejlesztői környezetbe.

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

Ez a parancs a helyi git mappába klónozza az adattárat. A Visual Studio-megoldás megnyitásához lépjen a storage-dotnet-rest-api-with-auth mappába, és nyissa meg a StorageRestApiAuth.sln fájlt.

Tudnivalók a REST-ről

A reprezentációs állapotátvitel (REST) egy olyan architektúra, amely lehetővé teszi egy szolgáltatás internetes protokollon, például HTTP/HTTPS protokollon keresztüli használatát. A REST független a kiszolgálón vagy az ügyfélen futó szoftverétől. A REST API bármely HTTP/HTTPS-t támogató platformról meghívható. Mac, Windows, Linux, Android rendszerű telefonon vagy táblagépen, i Telefon, iPod vagy webhelyen futó alkalmazásokat írhat, és mindegyik platformhoz ugyanazt a REST API-t használhatja.

A REST API hívása az ügyfél kéréséből és a szolgáltatás által visszaadott válaszból áll. A kérelemben egy URL-címet küld, amely tartalmazza a meghívni kívánt művelettel, a végrehajtandó erőforrással, a lekérdezési paraméterekkel és fejlécekkel, valamint a hívott művelettől függően egy hasznos adattartalommal. A szolgáltatás válasza tartalmaz egy állapotkódot, egy válaszfejlécek készletét, valamint a meghívott művelettől függően egy hasznos adatcsomagot.

Tudnivalók a mintaalkalmazásról

A mintaalkalmazás felsorolja a tárfiókban lévő tárolókat. Miután megismerte, hogy a REST API dokumentációjában szereplő információk hogyan kapcsolódnak a tényleges kódhoz, a többi REST-hívás könnyebben kitalálható.

Ha megtekinti a Blob Service REST API-t, láthatja a Blob Storage-on elvégezhető összes műveletet. A tárolóügyfél-kódtárak burkolók a REST API-k körül, így a REST API-k közvetlen használata nélkül is könnyen elérheti a tárolási erőforrásokat. Előfordulhat azonban, hogy a REST API-t szeretné használni a tárolóügyfél-kódtár helyett.

Tárolók listázása művelet

Ez a cikk a Tárolók listázása művelettel foglalkozik. Az alábbi információk segítenek megérteni a kérés és a válasz egyes mezőit.

Kérelem módja: GET. Ez az ige az a HTTP-metódus, amelyet a kérelemobjektum tulajdonságaként ad meg. Az ige további értékei közé tartozik a HEAD, a PUT és a DELETE, a hívott API-tól függően.

URI kérése: https://myaccount.blob.core.windows.net/?comp=list. A kérelem URI-ja a Blob Storage-fiók végpontjáról https://myaccount.blob.core.windows.net és az erőforrás-sztringből /?comp=listjön létre.

URI-paraméterek: A ListContainers hívásához további lekérdezési paraméterek is használhatók. Ezek közül a paraméterek közül néhány időtúllépés a híváshoz (másodpercben) és az előtaghoz, amelyet a szűréshez használnak.

Egy másik hasznos paraméter a maxresults: ha ennél az értéknél több tároló érhető el, a válasz törzse tartalmazni fog egy NextMarker elemet, amely a következő tárolót jelzi a következő kérésre való visszatéréshez. A funkció használatához a NextMarker értéket adja meg jelölőparaméterként az URI-ban a következő kéréskor. Ha ezt a funkciót használja, az hasonló az eredmények lapozásához.

További paraméterek használatához fűzze hozzá őket az erőforrás-sztringhez az értékkel, például a következő példában:

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

Kérelemfejlécek: Ez a szakasz a szükséges és nem kötelező kérésfejléceket sorolja fel. A fejlécek közül három szükséges: egy engedélyezési fejléc, x-ms-date (a kérelem UTC-ideje) és az x-ms-version (a használni kívánt REST API verzióját adja meg). A fejlécek x-ms-client-request-id azonosítójának megadása nem kötelező. Ennek a mezőnek az értékét bármire beállíthatja, és a naplózás engedélyezésekor a tárelemzési naplókba lesz írva.

Kérelem törzse: Nincs kérelemtörzs a ListContainershez. A kérelem törzse az összes PUT-művelethez használható a blobok feltöltésekor, beleértve a SetContainerAccessPolicy-t is. A kérelem törzse lehetővé teszi, hogy xml-listát küldjön az alkalmazandó tárolt hozzáférési szabályzatokról. A tárolt hozzáférési szabályzatokat a megosztott hozzáférésű jogosultságkódok (SAS) használatával foglalkozó cikk ismerteti.

Válasz állapotkódja: A szükséges állapotkódokat jelzi. Ebben a példában egy 200-ból álló HTTP-állapotkód rendben van. A HTTP-állapotkódok teljes listájáért tekintse meg az állapotkód-definíciókat. A Storage REST API-kra vonatkozó hibakódok megtekintéséhez lásd : Common REST API hibakódok

Válaszfejlécek: Ezek közé tartozik a tartalomtípus; x-ms-request-id, azaz az átadott kérelemazonosító; x-ms-version, amely a blobszolgáltatás használt verzióját jelzi; és a dátumot, amely UTC-ben van, és jelzi, hogy a kérés mikor lett megadva.

Válasz törzse: Ez a mező egy XML-struktúra, amely a kért adatokat biztosítja. Ebben a példában a válasz a tárolók és tulajdonságaik listája.

A REST-kérelem létrehozása

Az éles környezetben való futtatás biztonsága érdekében mindig HTTPS-t használjon HTTP helyett. Ennek a gyakorlatnak a alkalmazásában HTTP-t használunk a kérések és válaszok adatainak megtekintéséhez. Ha meg szeretné tekinteni a kérelmek és válaszok adatait a tényleges REST-hívásokban, letöltheti a Fiddlert vagy egy hasonló alkalmazást. A Visual Studio-megoldásban a tárfiók neve és kulcsa az osztályban van kódolva. A ListContainersAsyncREST metódus átadja a tárfiók nevét és a tárfiók kulcsát a REST-kérés különböző összetevőinek létrehozásához használt metódusoknak. Egy valós alkalmazásban a tárfiók neve és kulcsa egy konfigurációs fájlban, környezeti változókban vagy egy Azure Key Vaultból kérhető le.

A mintaprojektben az Engedélyezési fejléc létrehozásának kódja egy külön osztályban található. Az ötlet az, hogy felveheti az egész osztályt, és hozzáadhatja a saját megoldásához, és használhatja "ahogy van". Az engedélyezési fejléckód az Azure Storage-ba irányuló REST API-hívások többségénél működik.

A HttpRequestMessage objektumként szolgáló kérés létrehozásához nyissa meg a ListContainersAsyncREST fájlt a Program.cs fájlban. A kérés létrehozásának lépései a következők:

  • Hozza létre a szolgáltatás hívásához használandó URI-t.
  • Hozza létre a HttpRequestMessage objektumot, és állítsa be a hasznos adatokat. A hasznos adatok null értékűek a ListContainersAsyncREST esetében, mert nem adunk át semmit.
  • Adja hozzá az x-ms-date és az x-ms-version kérelemfejléceit.
  • Kérje le az engedélyezési fejlécet, és adja hozzá.

Néhány alapvető információ, amelyekre szüksége van:

  • A ListContainers esetében a metódus a .GET Ez az érték a kérés példányosításakor van beállítva.
  • Az erőforrás az URI lekérdezési része, amely jelzi, hogy melyik API van meghívva, így az érték ./?comp=list Ahogy korábban említettük, az erőforrás a referenciadokumentáció oldalán található, amely a ListContainers API-val kapcsolatos információkat jeleníti meg.
  • Az URI az adott tárfiók blobszolgáltatás-végpontjának létrehozásával és az erőforrás összefűzésével jön létre. A kérelem URI-jának értéke végül a következő leszhttp://contosorest.blob.core.windows.net/?comp=list: .
  • A ListContainers esetében a requestBody null értékű, és nincsenek további fejlécek.

A különböző API-k más paraméterekkel is rendelkezhetnek, például az ifMatch paraméterekkel. Példa az ifMatch használatára a PutBlob hívása során. Ebben az esetben az ifMatch értéket egy eTagre állítja be, és csak akkor frissíti a blobot, ha a megadott eTag megegyezik a blob aktuális eTag-ével. Ha valaki más frissítette a blobot az eTag lekérése óta, a módosítás nem lesz felülbírálva.

Először állítsa be a uri és a 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;

Ezután hozza létre a kérést, és állítsa be a metódust az URI-ra GET és adja meg.

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

Adja hozzá a kérelem fejlécét a következőhöz x-ms-date : és x-ms-version. A kód ezen a helyen adja hozzá a híváshoz szükséges további kérésfejléceket is. Ebben a példában nincsenek további fejlécek. A további fejlécekben áthaladó API-kra példa a Tároló ACL beállítása művelet. Ez az API-hívás hozzáad egy "x-ms-blob-public-access" nevű fejlécet és a hozzáférési szint értékét.

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

Hívja meg az engedélyezési fejlécet létrehozó metódust, és adja hozzá a kérelemfejlécekhez. Az engedélyezési fejléc a cikk későbbi részében jön létre. A metódus neve GetAuthorizationHeader, amely ebben a kódrészletben látható:

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

Ezen a ponton httpRequestMessage az engedélyezési fejlécekkel kiegészített REST-kérést tartalmazza.

A kérés elküldése

Most, hogy létrehozta a kérést, meghívhatja a SendAsync metódust, hogy elküldje azt az Azure Storage-ba. Ellenőrizze, hogy a válaszállapot-kód értéke 200, ami azt jelenti, hogy a művelet sikeres volt. Ezután elemezd a választ. Ebben az esetben a tárolók XML-listáját kapja meg. Nézzük meg a GetRESTRequest metódus meghívásának kódját a kérés létrehozásához, a kérés végrehajtásához, majd a tárolók listájának válaszának vizsgálatához.

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

Ha a SendAsync hívása során futtat egy hálózati sniffert, például a Fiddlert , láthatja a kérés és a válasz adatait. Lássuk. A tárfiók neve contosorest.

Kérés:

GET /?comp=list HTTP/1.1

Kérelemfejlécek:

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

A végrehajtás után visszaadott állapotkód és válaszfejlécek:

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

Válasz törzse (XML): A Tárolók listázása művelet esetében ez a tárolók listáját és tulajdonságait jeleníti meg.

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

Most, hogy megismerte a kérés létrehozását, a szolgáltatás meghívását és az eredmények elemzését, lássuk, hogyan hozhatja létre az engedélyezési fejlécet.

Az engedélyezési fejléc létrehozása

Tipp.

Az Azure Storage támogatja a Microsoft Entra-integrációt blobokhoz és üzenetsorokhoz. A Microsoft Entra ID sokkal egyszerűbb felületet kínál az Azure Storage-kérések engedélyezéséhez. A Rest-műveletek engedélyezéséhez a Microsoft Entra ID használatával kapcsolatos további információkért lásd: Engedélyezés a Microsoft Entra-azonosítóval. A Microsoft Entra Azure Storage-ral való integrációjának áttekintéséért lásd : Azure Storage-hozzáférés hitelesítése a Microsoft Entra ID használatával.

Az engedélyezési fogalmakkal kapcsolatos további információkért lásd : Kérelmek engedélyezése az Azure Storage-ba.

Lepárljuk ezt a cikket pontosan szükségesnek, és mutassuk meg a kódot.

Először használja a megosztott kulcs engedélyezését. Az engedélyezési fejléc formátuma így néz ki:

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

Az aláírási mező egy kivonatalapú üzenethitelesítési kód (HMAC), amely a kérelemből lett létrehozva, és az SHA256 algoritmussal lett kiszámítva, majd Base64 kódolással kódolva.

Ez a kódrészlet a megosztott kulcs aláírási sztringjének formátumát mutatja:

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 esetén meg kell adnia a VERB, az md5, a tartalom hosszát, a canonicalized Headers és a Canonicalized Resource értéket. A többit üresen hagyhatja ebben a példában \n , de megadható, hogy üresek-e.

A canonicalization olyan adat szabványosítási folyamat, amelynek több lehetséges ábrázolása is van. Ebben az esetben szabványosítja a fejléceket és az erőforrást. A canonicalized fejlécek az "x-ms-" kezdetű fejlécek. A canonicalized resource az erőforrás URI-ja, beleértve a tárfiók nevét és az összes lekérdezési paramétert (például ?comp=list). A canonicalizált erőforrás további lekérdezési paramétereket is tartalmaz, például timeout=60.

Kezdjük a két canonicalizált mezővel, mert az engedélyezési fejléc létrehozásához szükség van rájuk.

Canonicalized headers

Az érték létrehozásához kérje le az "x-ms-" kezdetű fejléceket, és rendezze őket, majd formázza őket példányok sztringjeként [key:value\n] , egyetlen sztringbe összefűzve. Ebben a példában a canonicalized fejlécek a következőképpen néznek ki:

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

A kimenet létrehozásához használt kód a következő:

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

Canonicalized resource

Az aláírási sztring ezen része a kérés által megcélzott tárfiókot jelöli. Ne feledje, hogy a kérelem URI-ja http://contosorest.blob.core.windows.net/?comp=lista tényleges fióknévvel (contosorest ebben az esetben). Ebben a példában a következőt adja vissza:

/contosorest/\ncomp:list

Ha lekérdezési paraméterekkel rendelkezik, ez a példa ezeket a paramétereket is tartalmazza. Itt látható a kód, amely további lekérdezési paramétereket és több értéket tartalmazó lekérdezési paramétereket is kezel. Ne feledje, hogy ezt a kódot úgy készíti el, hogy az az összes REST API-hoz működjön. Minden lehetőséget fel szeretne venni, még akkor is, ha a ListContainers metódusnak nincs szüksége mindegyikre.

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

Most, hogy a canonicalizált sztringek be vannak állítva, nézzük meg, hogyan hozhatja létre magát az engedélyezési fejlécet. Először hozzon létre egy sztringet az üzenetaláírásból a cikkben korábban megjelenített StringToSign formátumban. Ezt a koncepciót könnyebb elmagyarázni a kódban lévő megjegyzések használatával, így itt van az engedélyezési fejlécet visszaadó végső módszer:

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

A kód futtatásakor az eredményül kapott MessageSignature a következő példához hasonlóan néz ki:

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

Az AuthorizationHeader végső értéke:

SharedKey contosorest:Ms5sfwkA8nqTRw7Uury4MPHqM6Rj2nfgbYNvUKOa67w=

Az AuthorizationHeader az utolsó fejléc, amelyet a kérelem fejlécében helyeztek el a válasz közzététele előtt.

Ez mindent lefed, amit tudnia kell egy osztály összeállításához, amellyel létrehozhat egy kérést a Storage Services REST API-k meghívására.

Példa: Blobok listázása

Nézzük meg, hogyan módosíthatja a kódot, hogy meghívja a Container-1 tároló bloblistájának műveletét. Ez a kód majdnem megegyezik a tárolók listázására szolgáló kóddal, az egyetlen különbség az URI és a válasz elemzése.

Ha megtekinti a ListBlobs referenciadokumentációját, a metódus a GET, a RequestURI pedig a következő:

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

A ListContainersAsyncREST alkalmazásban módosítsa azt a kódot, amely az URI-t a ListBlobs API-ra állítja. A tároló neve container-1.

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

Ezután, ahol a választ kezeli, módosítsa a kódot úgy, hogy tárolók helyett blobokat keressen.

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

A minta futtatásakor az alábbihoz hasonló eredményeket kap:

Canonicalized headers:

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

Canonicalized resource:

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

Üzenet aláírása:

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

Engedélyezési fejléc:

SharedKey contosorest:uzvWZN1WUIv2LYC6e3En10/7EIQJ5X9KtFQqrZkxi6s=

A következő értékek a Fiddlertől származnak:

Kérés:

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

Kérelemfejlécek:

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

A végrehajtás után visszaadott állapotkód és válaszfejlécek:

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

Válasz törzse (XML): Ez az XML-válasz a blobok listáját és tulajdonságait jeleníti meg.

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

Összesítés

Ebben a cikkben megtanulta, hogyan kérhet kérelmet a Blob Storage REST API-hoz. A kéréssel lekérheti a tárolók listáját vagy a tárolóban lévő blobok listáját. Megtanulta, hogyan hozhatja létre az engedélyezési aláírást a REST API-híváshoz, és hogyan használhatja azt a REST-kérelemben. Végül megtanulta, hogyan vizsgálhatja meg a választ.

Következő lépések