我在尝试使用.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();
}
其中包含以下消息的401:"The access token is not provided in the 'Authorization' header"
奇怪的是,如果我采用完全的accessToken和resourceUri并将它放在Postman中它工作正常(201)。
我已在访问控制下添加了该应用程序,并在数据资源管理器>中添加了该应用程序。访问选项卡,并给予完全权限(读,写,执行)。
我甚至用RestSharp重写了这个,但同样的错误给了我,我检查了JWT令牌它肯定是正确的并且当我在Postman中使用它时返回数据。似乎标题在某处被删除了。
这让我发疯,我无法弄清楚我做错了什么!有人可以帮忙吗?
答案 0 :(得分:1)
该问题似乎与正在发生的重定向有关,该重定向在资源URI中添加了一个额外的参数添加到操作中。
参数为" write = true"。所以我更新了资源URI以包含参数。
即。用于PUT操作" https://yourstore.azuredatalakestore.net/webhdfs/v1/xxx?op=CREATE&write=true"
非常奇怪的行为,但它现在有效。