簡體   English   中英

獲取新創建的存儲帳戶的存儲帳戶密鑰

[英]Get Storage Account Key of newly create storage account

我正在嘗試使用C#獲取一個新的存儲帳戶密鑰,但是它給了我一個例外

異常消息-執行該操作之前,存儲帳戶設置狀態必須為“成功”。 堆棧跟蹤-在Microsoft.Azure.Management.Storage.StorageAccountsOperations.d__12.MoveNext()-從上一個引發異常的位置開始的堆棧跟蹤結束-在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() Microsoft.Azure.Management.Storage.StorageAccountsOperationsExtensions.d__15.MoveNext()上的.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任務任務)---從上一個引發異常的位置開始的堆棧結束跟蹤---在System.Runtime。 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)處的ExceptionServices.ExceptionDispatchInfo.Throw()System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()處的PPS.Controllers.ManageResourcesController.d__33.MoveNext()

根據我的要求,我需要創建一個具有指定位置的新存儲帳戶並在其中上傳文件。 我可以通過Azure REST API創建一個新的存儲帳戶,但是當我嘗試獲取新的存儲帳戶密鑰時,它給了我上述的異常。 以下是我用於創建並獲取存儲帳戶密鑰的代碼

string token = GetAccessToken();
var Credentials = new TokenCredentials(token);



            var resourceManagementClient = new ResourceManagementClient(Credentials);
            resourceManagementClient.SubscriptionId = SubscriptionID;

            var storageProvider = resourceManagementClient.Providers.Register("Microsoft.Storage");

            var storageManagementClient = new StorageManagementClient(Credentials);
            storageManagementClient.SubscriptionId = SubscriptionID;

            string rgName = "Test" + location.Trim().Replace(" ", string.Empty);

            var resourceGroup = new Microsoft.Azure.Management.Resources.Models.ResourceGroup
            {
                Location = location
            };
            var rgResult = resourceManagementClient.ResourceGroups.CreateOrUpdate(rgName, resourceGroup);

            string stAccName = "TCStAccount"+Guid.NewGuid().ToString().Substring(0, 8);
            stAccName = stAccName.ToLower();

            sku sk = new sku();
            sk.name = "Standard_LRS";

            storagesettings st = new storagesettings();
            st.kind = "Storage";
            st.location = location;
            st.sku = sk;

            using (var client = new HttpClient())
            {
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

                using (var stream = new MemoryStream())
                using (var writer = new StreamWriter(stream))
                {
                    var payloadText = JsonConvert.SerializeObject(st);

                    writer.Write(payloadText);
                    writer.Flush();
                    stream.Flush();
                    stream.Position = 0;

                    using (var content = new StreamContent(stream))
                    {
                        content.Headers.Add("Content-Type", "application/json");
                        content.Headers.Add("x-ms-version", "2016-12-01");
                        Uri uri = new Uri(String.Format("https://management.azure.com/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Storage/storageAccounts/{2}?api-version=2016-12-01", SubscriptionID, rgName, stAccName));

                        var response = await client.PutAsync(uri, content);
                        string detailError = await response.Content.ReadAsStringAsync();

                        if (!response.IsSuccessStatusCode)
                        {
                            throw new InvalidOperationException(response.ReasonPhrase);
                        }
                    }
                }
            }

            var storageAccountKey = await storageManagementClient.StorageAccounts.ListKeysAsync(rgName, stAccName);
            string storage_Account_Key = storageAccountKey.Keys[0].Value; 

讓我知道是否想念任何事情。

根據錯誤消息,您可以找到:

在執行操作之前,存儲帳戶設置狀態必須為“成功”。

創建存儲帳戶后,azure將開始創建存儲帳戶。

這將花費一些時間,將近10秒鍾。

在成功創建存儲帳戶之前,您無法獲取存儲訪問密鑰。

您可以使用thread.sleep()方法等待成功創建的存儲帳戶,然后再次發送請求以詢問存儲帳戶密鑰。

它將運作良好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM