使用 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