【发布时间】:2023-03-02 22:29:01
【问题描述】:
这是我查找存储容器的代码:
var api = $"https://{storageAccountName}.blob.core.windows.net/?comp=list";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); //token obtained from https://storage.azure.com/
client.BaseAddress = new Uri($"https://{storageAccountName}.blob.core.windows.net/");
using (var responseGet = client.GetAsync(api).Result)
{
if (responseGet.IsSuccessStatusCode)
{
var xmlDocument = new XmlDocument();
xmlDocument.LoadXml(responseGet.Content.ReadAsStringAsync().Result);
foreach (XmlNode a in xmlDocument.DocumentElement.SelectNodes("Containers/Container"))
{
containerNameList.Add(a.SelectSingleNode("Name").FirstChild.Value);
}
}
}
}
我遇到了一个错误:
`StatusCode: 403, ReasonPhrase: '服务器未能验证 要求。确保 Authorization 标头的值已形成 正确包括签名。',版本:1.1,内容:
System.Net.Http.HttpConnection+HttpConnectionResponseContent, Headers:
{
Server: Windows-Azure-Blob/1.0
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: 9d70d7ff-901e-0096-4c5b-aec38d000000
Date: Mon, 09 Dec 2019 06:38:16 GMT
Content-Length: 438
Content-Type: application/xml
}`
我从https://storage.azure.com/获得了访问令牌
这是删除存储容器的代码:
var strApi = $"https://{storageAccountName}.blob.core.windows.net/{storageContainerName}?restype=container";
using (var client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
client.BaseAddress = new Uri(BaseManagementUri);
using (var responseGet = client.DeleteAsync(strApi).Result)
{
if (responseGet.IsSuccessStatusCode)
{
log.LogInformation($"Deleted {storageAccountName}");
}
else
{
log.LogWarning($"Failed to deleted {storageAccountName}\n{responseGet.Content.ReadAsByteArrayAsync().Result}");
}
}
}
如何获取正确的访问令牌以及上述操作所需的所有标头?
【问题讨论】:
-
为什么不使用 Storage SDK for .Net?
-
我正在创建一个 Azure 函数,我将尝试使用 MSI 获取访问令牌。
-
@GourGopalg 您还有其他顾虑吗?
-
MSI 方法似乎有效!非常感谢您的努力!真的帮了我。
标签: c# azure rest azure-storage azure-blob-storage