2017-10-25 10 views
1

httpクライアント要求を使用して、空のストレージからすべてのBlobコンテナを取得したい。 私は1つのサンプルを行いましたが、私は禁じられた403エラーに直面しています。Azure Blobストレージを取得するHTTPリクエストを使用してすべてのBlobを取得403禁止されたエラー

私はあなたのAuthorizationHeader1方法でいくつかの問題があります

 private const string ListofContainersURL = "https://{0}.blob.core.windows.net/?comp=list&maxresults=3"; //https://myaccount.blob.core.windows.net/?comp=list&maxresults=3 


     public string ListofContainersinBlob() 
      { 

       string Requesturl = string.Format(ListofContainersURL, storageAccount); 
       HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Requesturl); 
       string now = DateTime.UtcNow.ToString("R"); 
       request.Method = "GET"; 
       request.Headers.Add("x-ms-version", "2015-12-11"); 
       request.Headers.Add("x-ms-date", now); 
       request.Headers.Add("Authorization", AuthorizationHeader1("GET", now, request, storageAccount, storageKey)); 
       var response = request.GetResponseAsync(); 

       using (HttpWebResponse resp = (HttpWebResponse)request.GetResponse()) 
       { 
        return resp.StatusCode.ToString(); 
       } 

      } 


      private string AuthorizationHeader1(string method, string now, HttpWebRequest request, string storageAccount, string storageKey) 
      { 
       string headerResource = $"x-ms-blob-type:BlockBlob\nx-ms-date:{now}\nx-ms-version:2015-12-11"; 
       string urlResource = $"/{storageAccount}"; 
       String AuthorizationHeader = String.Format("{0} {1}:{2}", "SharedKey", storageAccount, storageKey); 
       return AuthorizationHeader; 
      } 

答えて

1

、私のコードを添付。承認ヘッダーを構成する方法については、Authentication for the Azure Storage Servicesを参照してください。このコードを試してください:

private static string AuthorizationHeader1(string method, string now, HttpWebRequest request, string storageAccount, string storageKey) 
    { 
     string headerResource = $"x-ms-date:{now}\nx-ms-version:2015-12-11"; 
     string canonicalizedResource = $"/{storageAccount}/\ncomp:list\nmaxresults:3"; 
     var contentEncoding = ""; 
     var contentLanguage = ""; 
     var contentLength = ""; 
     var contentMd5 = ""; 
     var contentType = ""; 
     var date = ""; 
     var ifModifiedSince = ""; 
     var ifMatch = ""; 
     var ifNoneMatch = ""; 
     var ifUnmodifiedSince = ""; 
     var range = ""; 
     var stringToSign = $"{method}\n{contentEncoding}\n{contentLanguage}\n{contentLength}\n{contentMd5}\n{contentType}\n{date}\n{ifModifiedSince}\n{ifMatch}\n{ifNoneMatch}\n{ifUnmodifiedSince}\n{range}\n{headerResource}\n{canonicalizedResource}"; 
     var signature = ""; 
     using (var hmacSha256 = new HMACSHA256(Convert.FromBase64String(storageKey))) 
     { 
      var dataToHmac = Encoding.UTF8.GetBytes(stringToSign); 
      signature = Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac)); 
     } 
     String AuthorizationHeader = String.Format("{0} {1}:{2}", "SharedKey", storageAccount, signature); 
     return AuthorizationHeader; 
    } 
+0

はい私はそれを変更しました。どうもありがとうございました。 –

関連する問題