我正在尝试使用带有授权标头的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的标识/连接/用户信息端点。不知道有什么区别。
请帮助。 提前致谢, 坎南
答案 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,如下所示。有可以使用的示例方法。