使用 c# 客户端时缺少授权 Headers
Authorization Headers is missing using c# client
我正在使用 django-rest-framework
开发 RESTFUL API。对于授权,我选择使用令牌授权(而不是 JWT)。以下是我的尝试:
使用 POSTMAN(有效)
headers:
Authorization: Token 329367424fd30a876ccff05dbc5a18d86fe7158c
使用 C# 客户端(无法正常工作)
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Token 329367424fd30a876ccff05dbc5a18d86fe7158c");
await client.GetAsync(<url>)
// Authentication credentials were not provided.
在我调试并覆盖 TokenAuthentication
函数后,我意识到如果 C#
客户端请求,Authorization headers
将被删除。
编辑:
实际上我已经尝试使用 Javascript 并且它也有效,我认为问题是 C# HttpClient
.
我试过了
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization3", $"token {token}");
client.DefaultRequestHeaders.Add("Authorization", $"token {token}");
并且我在 python 中调试 Authorization
函数,我发现只有 Authorization3
被发送到服务器而 Authorization
没有
像下面这样使用 HttpClient :
using (var client = new HttpClient())
{
var request = new HttpRequestMessage();
request.RequestUri = new Uri("url");
request.Method = HttpMethod.Get;
//request.Content = new StringContent("body", Encoding.UTF8, "application/json");
request.Headers.TryAddWithoutValidation("Authorization", "Token 329367424fd30a876ccff05dbc5a18d86fe7158c");
var getResponse = await client.SendAsync(request);
using (HttpContent content = getResponse.Content)
{
var result = await content.ReadAsStringAsync();
}
}
缺少 Authorization
header 的原因是重定向。很抱歉没有发布我的 Uri 字符串,因为我从来没有想过这是问题所在。
我的 Uri 字符串是 http://localhost:3000/module?query=123
。调用 GetAsync
后,Uri 字符串变为 http://localhost:3000/module/?query=123
(模块后的额外斜杠)。所以库检测到它是一个重定向.
所以我的快速修复只是将 url 修改为 http://localhost:3000/module/?query=123
对于那些想知道它是否是由重定向引起的,可以查看这个 Link
我正在使用 django-rest-framework
开发 RESTFUL API。对于授权,我选择使用令牌授权(而不是 JWT)。以下是我的尝试:
使用 POSTMAN(有效)
headers:
Authorization: Token 329367424fd30a876ccff05dbc5a18d86fe7158c
使用 C# 客户端(无法正常工作)
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Token 329367424fd30a876ccff05dbc5a18d86fe7158c");
await client.GetAsync(<url>)
// Authentication credentials were not provided.
在我调试并覆盖 TokenAuthentication
函数后,我意识到如果 C#
客户端请求,Authorization headers
将被删除。
编辑:
实际上我已经尝试使用 Javascript 并且它也有效,我认为问题是 C# HttpClient
.
我试过了
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization3", $"token {token}");
client.DefaultRequestHeaders.Add("Authorization", $"token {token}");
并且我在 python 中调试 Authorization
函数,我发现只有 Authorization3
被发送到服务器而 Authorization
没有
像下面这样使用 HttpClient :
using (var client = new HttpClient())
{
var request = new HttpRequestMessage();
request.RequestUri = new Uri("url");
request.Method = HttpMethod.Get;
//request.Content = new StringContent("body", Encoding.UTF8, "application/json");
request.Headers.TryAddWithoutValidation("Authorization", "Token 329367424fd30a876ccff05dbc5a18d86fe7158c");
var getResponse = await client.SendAsync(request);
using (HttpContent content = getResponse.Content)
{
var result = await content.ReadAsStringAsync();
}
}
缺少 Authorization
header 的原因是重定向。很抱歉没有发布我的 Uri 字符串,因为我从来没有想过这是问题所在。
我的 Uri 字符串是 http://localhost:3000/module?query=123
。调用 GetAsync
后,Uri 字符串变为 http://localhost:3000/module/?query=123
(模块后的额外斜杠)。所以库检测到它是一个重定向.
所以我的快速修复只是将 url 修改为 http://localhost:3000/module/?query=123
对于那些想知道它是否是由重定向引起的,可以查看这个 Link