使用 HttpClient 的 Azure Data Lake Store "The access token is not provided in the 'Authorization' header"

Azure Data Lake Store "The access token is not provided in the 'Authorization' header" using HttpClient

我在尝试使用 .NET 中的 HttpClient 通过 WebHDFS API 访问 Azure Data Lake Store 时遇到问题

这是我的代码:

using (var client = new HttpClient())
{
    HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Put, resourceUri);

    message.Headers.Authorization = new AuthenticationHeaderValue("Bearer", _accessToken);
    message.Content = new StringContent(JsonConvert.SerializeObject(body));
    message.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    var result = await client.SendAsync(message);
    var content = await result.Content.ReadAsStringAsync();

    result.EnsureSuccessStatusCode();
}

哪个 returns 给我一个 401 消息:"The access token is not provided in the 'Authorization' header"

奇怪的是,如果我获取准确的 accessToken 和 resourceUri 并将其放入 Postman,它就可以正常工作 (201)。

我已将应用程序添加到访问控制下,并在“数据资源管理器”>“访问”选项卡中,并授予了全部权限(读、写、执行)。

我什至使用 RestSharp 重写了它,但我仍然遇到同样的错误,我检查了 JWT 令牌,它绝对正确并在我在 Postman 中使用它时返回了数据。 header 似乎在某处被删除了。

这快把我逼疯了,我不知道自己做错了什么!有人可以帮忙吗?

该问题似乎与正在发生的重定向有关,该重定向在资源 URI 中向操作添加了一个额外的参数。

参数为"write=true"。所以我更新了 Resource URI 以包含该参数。

即对于 PUT 操作“https://yourstore.azuredatalakestore.net/webhdfs/v1/xxx?op=CREATE&write=true

非常奇怪的行为,但现在有效。