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=list
jö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ő lesz
http://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=list
a 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.