我使用以下代码将文件复制到 Azure 文件共享。它抛出错误,有时当我这样做时它会起作用
- 例如通过替换连接字符串中的新 key 来重置 key
- 通过更改本地计算机中的 cst 和 est 时间(并非所有时间都有效)
我收到错误为
Azure.RequestFailedException:服务器无法对请求进行身份验证。确保授权 header 的值格式正确,包括签名。 请求 ID:b6a51c3f-b01a-0037-7774-d19906000000 时间:2022-09-26T06:53:52.3042347Z 状态:403(服务器无法验证请求。请确保授权 header 的值格式正确,包括签名。) 错误代码:身份验证失败 附加信息: AuthenticationErrorDetail:HTTP 请求“Xrp6MB0=”中发现的 MAC 签名与任何计算的签名不同。服务器使用以下字符串进行签名:'GET 2022 年 9 月 22 日星期四 10:07:55 GMT “0x8DA9C8251A37348” x-ms-客户端-请求-id:25ff53d8-7a55-414a-954b-ff8f6d05bced x-ms-date:2022 年 9 月 26 日星期一 06:53:52 GMT x-ms-return-client-request-id:true x-ms-版本:2021-08-06
内容:
我正在使用访问 key 1 访问 Azure 文件共享
有人可以让我知道我在代码中犯的错误
using Azure;
using Azure.Storage.Files.Shares;
using Microsoft.WindowsAzure.Storage.File;
using System.Collections.Generic;
var connectionString = "DefaultEndpointsProtocol=https;AccountName=XXXXX;AccountKey=lPI20ZMzVjB9xcPmIJQjjIhFIuWs6JxTcxef7Ri3hRMtE3N1ov81gpabOVe+0BKEFiEZdhcAPhYC+ASt4Yjddw==;EndpointSuffix=core.windows.net";
var fileShareName = "FileshareName";
var folderName = "FolderName";
ShareClient share = new(connectionString, fileShareName);
if (!share.Exists())
{
share.CreateIfNotExists();
}
var directory = share.GetDirectoryClient(folderName);
if(!directory.Exists())
{
directory.CreateIfNotExists();
}
var directories = directory.GetFilesAndDirectories();
string sFilename = "sample.pdf";
string sPath = @"\\abc\Test.pdf";
foreach (var s in directories)
{
if (s.Name == "Files")
{
var x = directory.GetSubdirectoryClient(s.Name);
ShareFileClient file = x.GetFileClient(sFilename);
using (FileStream stream = File.OpenRead(sPath))
{
file.Create(stream.Length);
file.UploadRange(
new HttpRange(0, stream.Length),
stream);
}
}
}
Console.ReadLine();
最佳答案
if (!share.Exists()) 不起作用,我们需要编写为 share.CreateIfNotExists()。 它解决了身份验证错误。
我认为该错误是由于运行代码的计算机上的日期/时间设置造成的。
如果您注意到错误消息,则 Azure 存储服务返回的日期/时间为 2022-09-26T06:53:52.3042347Z
,但请求中发送的日期/时间值为 >2022 年 9 月 22 日星期四 10:07:55 GMT
。
由于运行代码的计算机上的当前日期/时间比 Azure 存储服务上的日期/时间早大约 4 天,因此对 Azure 存储的请求将被拒绝。
我建议查看本地计算机上的日期/时间值并确保其正确。
关于C# Azure 文件共享抛出错误“服务器无法验证请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73850413/