[英]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之間存在一些差異。
在.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");
.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.