Azur rest api mis blob

J’essaie de mettre une goutte avec Azur Rest Api. J’ai fait une demande “GET” avec succès, mais j’avais des problèmes avec la demande “PUT”. Lorsque j’essaie de faire une requête “PUT”, j’obtiens une erreur 404 (j’ai vu le même message dans stackoverflow mais cela ne m’a pas aidé). Aucune suggestion?

public void UploadBlobWithRestAPI(ssortingng uri, DateTime now) { ssortingng blobName = "test.txt"; ssortingng method = "PUT"; ssortingng sampleContent = "This is sample text."; int contentLength = Encoding.UTF8.GetByteCount(sampleContent); ssortingng querySsortingng = (new Uri(uri)).Query; ssortingng blobContainerUri = uri.Subssortingng(0, uri.Length - querySsortingng.Length); ssortingng requestUri = ssortingng.Format(CultureInfo.InvariantCulture, "{0}/{1}{2}", blobContainerUri, blobName, querySsortingng); HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); ssortingng nnow = now.ToSsortingng("R", System.Globalization.CultureInfo.InvariantCulture); request.Method = method; request.Headers.Add("x-ms-version", "2015-02-21"); request.Headers.Add("x-ms-date", nnow); request.ContentType = "text/plain; charset=UTF-8"; request.Headers.Add("x-ms-blob-type", "BlockBlob"); request.ContentLength = contentLength; using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(Encoding.UTF8.GetBytes(sampleContent), 0, contentLength); } request.Headers.Add("Authorization", AuthorizationHeader(method, now, request, "", "")); using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) { MessageBox.Show(resp.StatusCode.ToSsortingng()); } } public ssortingng AuthorizationHeader(ssortingng method, DateTime now, HttpWebRequest request, ssortingng ifMatch = "", ssortingng md5 = "") { ssortingng MessageSignature; ssortingng StorageKey = "xxx"; ssortingng StorageAccount = "upgradedevstorage"; MessageSignature = Ssortingng.Format("{0}\n\n\n{1}\n{5}\n\n\n\n{2}\n\n\n\n{3}{4}", method, (method == "GET" || method == "HEAD") ? Ssortingng.Empty : request.ContentLength.ToSsortingng(), ifMatch, GetCanonicalizedHeaders(request), GetCanonicalizedResource(request.RequestUri, StorageAccount), md5 ); ??? //ssortingng MessageSignaturePut= Ssortingng.Format("{0}\n\n{1}\n\n{2}{3}", // method, // "text/plain; charset=UTF-8", // GetCanonicalizedHeaders(request), // GetCanonicalizedResource(request.RequestUri, StorageAccount) // ); byte[] SignatureBytes = System.Text.Encoding.UTF8.GetBytes(MessageSignature); System.Security.Cryptography.HMACSHA256 SHA256 = new System.Security.Cryptography.HMACSHA256(Convert.FromBase64Ssortingng(StorageKey)); ssortingng signature = Convert.ToBase64Ssortingng(SHA256.ComputeHash(SignatureBytes)); ssortingng AuthorizationHeader = "SharedKey " + StorageAccount + ":" + Convert.ToBase64Ssortingng(SHA256.ComputeHash(SignatureBytes)); return AuthorizationHeader; } 

Veuillez considérer l’extrait de code suivant. Cela devrait fonctionner pour vous.

 void UploadBlobWithRestAPI() { ssortingng storageKey = ""; ssortingng storageAccount = ""; ssortingng containerName = ""; ssortingng blobName = "test.txt"; ssortingng method = "PUT"; ssortingng sampleContent = "This is sample text."; int contentLength = Encoding.UTF8.GetByteCount(sampleContent); ssortingng requestUri = $"https://{storageAccount}.blob.core.windows.net/{containerName}/{blobName}"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(requestUri); ssortingng now = DateTime.UtcNow.ToSsortingng("R"); request.Method = method; request.ContentType = "text/plain; charset=UTF-8"; request.ContentLength = contentLength; request.Headers.Add("x-ms-version", "2015-12-11"); request.Headers.Add("x-ms-date", now); request.Headers.Add("x-ms-blob-type", "BlockBlob"); request.Headers.Add("Authorization", AuthorizationHeader(method, now, request, storageAccount, storageKey, containerName, blobName)); using (Stream requestStream = request.GetRequestStream()) { requestStream.Write(Encoding.UTF8.GetBytes(sampleContent), 0, contentLength); } using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) { MessageBox.Show(resp.StatusCode.ToSsortingng()); } } public ssortingng AuthorizationHeader(ssortingng method, ssortingng now, HttpWebRequest request, ssortingng storageAccount, ssortingng storageKey, ssortingng containerName, ssortingng blobName) { ssortingng headerResource = $"x-ms-blob-type:BlockBlob\nx-ms-date:{now}\nx-ms-version:2015-12-11"; ssortingng urlResource = $"/{storageAccount}/{containerName}/{blobName}"; ssortingng ssortingngToSign = $"{method}\n\n\n{request.ContentLength}\n\n{request.ContentType}\n\n\n\n\n\n\n{headerResource}\n{urlResource}"; HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64Ssortingng(storageKey)); ssortingng signature = Convert.ToBase64Ssortingng(hmac.ComputeHash(Encoding.UTF8.GetBytes(ssortingngToSign))); Ssortingng AuthorizationHeader = Ssortingng.Format("{0} {1}:{2}", "SharedKey", storageAccount, signature); return AuthorizationHeader; } 

Et le trafic capturé par Fiddler comme suit:

entrez la description de l'image ici