我正在尝试将 parquet 文件上传到 Azure,但它不断向我显示一条错误消息,指出它缺少必需的 HTTP 标头。
在我提供的示例中,我只是尝试了内存流中的一些基本数据,但它仍然抛出此异常。
RequestFailedException:为此必需的 HTTP 标头 未指定请求。 请求ID:0bd87df1-701f-0003-5ff4-944ccd000000 时间:2024-04-22T20:36:16.2840714Z 状态:400(HTTP 标头 未指定此请求的强制要求。)错误代码: 缺少必需的标头
内容:{“错误”:{“代码”:“MissingRequiredHeader”,“消息”:“HTTP 此请求的强制标头不是 指定的。 请求编号:... 时间:2024-04-22T20:36:16.2840714Z"}}
标头:连接:保持活动 x-ms-错误代码:MissingRequiredHeader x-ms-请求-id:... x-ms-版本: 2024-05-04 x-ms-客户端-请求 ID: ... 内容长度:204 内容类型: application/json;charset=utf-8 日期:2024 年 4 月 22 日星期一 20:36:16 GMT 服务器:Windows-Azure-HDFS/1.0 Microsoft-HTTPAPI/2.0 通过:已编辑
代码:
string storageAccountName = "name";
string storageAccountKey = "key";
StorageSharedKeyCredential sharedKeyCredential = new StorageSharedKeyCredential(storageAccountName, storageAccountKey);
BlobServiceClient blobServiceClient = new BlobServiceClient(
new Uri("https://" + storageAccountName + ".dfs.core.windows.net"),
sharedKeyCredential
);
BlobContainerClient desContainer = blobServiceClient.GetBlobContainerClient("testcontainer");
BlobClient desBlob = desContainer.GetBlobClient("/testAPI/my.parquet");
var myStr = "Hello!";
var content = Encoding.UTF8.GetBytes(myStr);
using (var ms = new MemoryStream(content))
desBlob.Upload(ms);
我无法找到缺少的标头,并且我不确定如何添加它们,因为除此之外似乎没有添加标头的标准方法;内容类型
套餐:
我尝试恢复到较旧的软件包,认为功能可能以前就存在,但在最近的修订中发生了变化。
任何正确方向的帮助都会有所帮助。
如评论中所述,请将端点后缀从
dfs.core.windows.net
更改为 blob.core.windows.net
。我的猜测是,当 REST API 看到 dfs.core.windows.net
端点时,它会尝试使用 Data Lake REST API 而不是 Blob Storage REST API,因此,您会收到丢失标头错误。