Azure Data Lake Store"授权'中未提供访问令牌。报头"使用HttpClient

时间:2016-10-26 02:27:13

标签: c# azure azure-active-directory azure-data-lake

我在尝试使用.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中使用它时返回数据。似乎标题在某处被删除了。

这让我发疯,我无法弄清楚我做错了什么!有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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