如何解决使用 c# 客户端缺少授权标头
我正在使用 django-rest-framework
开发 RESTFUL API。对于授权,我选择使用令牌授权(而不是 JWT)。以下是我尝试过的:
使用 POSTMAN (Works)
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
函数后,我意识到如果 Authorization headers
客户端请求,C#
将被删除。
编辑:
实际上我已经尝试过使用 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
标头丢失的原因是重定向。我很抱歉没有发布我的 Uri 字符串,因为我从不认为这是问题所在。
我的 Uri 字符串是 http://localhost:3000/module?query=123
。调用 GetAsync
后,Uri 字符串变为 http://localhost:3000/module/?query=123
(模块后的额外斜线)。所以库检测到它是一个重定向。
所以我的快速修复只是将 url 修改为 http://localhost:3000/module/?query=123
对于那些想知道它是否由重定向引起的人可以查看此Link
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。