.NET框架HttpClient授权标头不起作用

时间:2018-08-22 05:00:53

标签: .net asp.net-mvc

我正在尝试使用带有授权标头的HttpClient进行GET调用。 [授权:承载]。

HttpClient.GetAsync始终返回401(未经授权)。当使用.netstarndard的HttpClient进行相同的调用时,它可以正常工作。下面的代码向我显示401。相同的端点在Postman中也适用。请帮我解决我所缺少的。

HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("GET"), "<Get endpoint>");
request.Headers.Add("Authorization", "Bearer " + "<token>");
var resp = client.SendAsync(request).Result;

我也尝试了下面的代码,但这也不起作用。

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Clear();
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "<token>");
client.GetAsync("<get endpoint>");

并以此。

HttpClient.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");
  

注意:.netstandard HttpClient使用相同的代码。问题仅在于.NET Framework。 [请不要建议我使用.netstarndard库,因为我想从.NET Framework应用程序中调用HttpClient Get。]

     

我正在尝试调用OAuth的标识/连接/用户信息端点。不知道有什么区别。

请帮助。 提前致谢, 坎南

3 个答案:

答案 0 :(得分:1)

尝试这种方式:

HttpClient client = new HttpClient();
var requestMessage = new HttpRequestMessage(HttpMethod.Get, "https://your.site.com");
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", your_token);
client.SendAsync(requestMessage);

答案 1 :(得分:0)

您说您尝试过

  

HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Clear(); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Authorization", "<token>"); client.GetAsync("<get endpoint>");

您在此处将“授权”传递给AuthenticationHeaderValue,我认为这是错误的。 您应该将方案传递给AuthenticationHeaderValue而不是标题名称。因此,本例中为“ Bearer”。 尝试这个 HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Clear(); client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "<token>"); client.GetAsync("<get endpoint>");

答案 2 :(得分:0)

我建议您使用Http Client Wrapper,如下所示。有可以使用的示例方法。

https://github.com/elgunmirze/HttpClientWrapper