gpt4 book ai didi

c# - 如何在.Net Core中使用REST API访问azure表存储

转载 作者:行者123 更新时间:2023-12-03 05:54:56 26 4
gpt4 key购买 nike

我想从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;

最佳答案

据我所知,.Net Core 和 .Net Standard 在使用 REST API 时存在一些差异。

  1. 在 .NET 4.5 中,您必须在HttpWebRequest 对象,您不能只将它们设置在 header 中。好吧,在核心上他们决定改变方向,你必须使用 header 集合。

    .NET 核心: 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;

更多详细信息,您可以引用以下代码:

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();

结果: enter image description here

关于c# - 如何在.Net Core中使用REST API访问azure表存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42805745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com