簡體   English   中英

如何在.Net Core中使用REST API訪問Azure表存儲

[英]How to access azure table storage using REST API in .Net Core

我想從azure表存儲訪問數據,但是我無法使用Net core訪問。但是使用.Net Framework是可能的。

下面的代碼是用.Net Framework編寫的

var sharedKey = Convert.FromBase64String("AccountKey");
        var request = WebRequest.Create("http://accountname.table.core.windows.net/tablename");
        request.ContentLength = 0;
        request.Headers.Add("x-ms-date", DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture));
        var resource = request.RequestUri.PathAndQuery;
        if (resource.Contains("?"))
        {
            resource = resource.Substring(0, resource.IndexOf("?"));
        }

        string stringToSign = string.Format("{0}\n/{1}{2}",
                request.Headers["x-ms-date"],
                 "accountname",
                resource
            );
        var hasher = new HMACSHA256(sharedKey);
        string signedSignature = Convert.ToBase64String(hasher.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
        string authorizationHeader = string.Format("{0} {1}:{2}", "SharedKeyLite", "accountname", signedSignature);
        request.Headers.Add("Authorization", authorizationHeader);
        var response = request.GetResponse();
        return response;

據我所知,使用REST API時.Net Core和.Net Standard之間存在一些差異。

  1. 在.NET 4.5中,必須在HttpWebRequest對象上設置一些屬性,而不能僅在標頭中設置它們。 好吧,從根本上講,他們決定撤退路線,您必須使用標頭集合。

    .NET Core: request.Headers["x-ms-version"] = "2015-04-05";

    .NET 4.5: request.Headers.Add("x-ms-version", "2015-04-05");

  2. .NET Core僅支持WebResponse.GetResponseAsync()方法,因此您只能使用異步方法來獲取結果。

    如下所示: Task<WebResponse> response = request.GetResponseAsync(); HttpWebResponse responseresult = (HttpWebResponse)response.Result; Task<WebResponse> response = request.GetResponseAsync(); HttpWebResponse responseresult = (HttpWebResponse)response.Result;

更多詳細信息,您可以參考以下代碼:

string storageAccount = "storageAccount";
        string accessKey = "accessKey";
        string resourcePath = "TableSample()";
        string uri = @"https://" + storageAccount + ".table.core.windows.net/" + resourcePath;
        // Web request 
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        request.Method = "GET";
        request.ContentType = "application/json";
        request.Accept = "application/json;odata=nometadata";
        request.Headers["x-ms-date"] = DateTime.UtcNow.ToString("R", System.Globalization.CultureInfo.InvariantCulture);
        request.Headers["x-ms-version"] = "2015-04-05";
        string stringToSign = request.Headers["x-ms-date"] + "\n"; 
        int query = resourcePath.IndexOf("?");
        if (query > 0)
        {
            resourcePath = resourcePath.Substring(0, query);
        }
        stringToSign += "/" + storageAccount + "/" + resourcePath;
        System.Security.Cryptography.HMACSHA256 hasher = new System.Security.Cryptography.HMACSHA256(Convert.FromBase64String(accessKey));
        string strAuthorization = "SharedKeyLite " + storageAccount + ":" + System.Convert.ToBase64String(hasher.ComputeHash(System.Text.Encoding.UTF8.GetBytes(stringToSign)));


        request.Headers["Authorization"] = strAuthorization;

        Task<WebResponse> response = request.GetResponseAsync();
        HttpWebResponse responseresult = (HttpWebResponse)response.Result;

            using (System.IO.StreamReader r = new System.IO.StreamReader(responseresult.GetResponseStream()))
            {
                string jsonData = r.ReadToEnd();
                Console.WriteLine(jsonData);
           }
        Console.ReadLine();

結果: 在此處輸入圖片說明

暫無
暫無

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

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