【问题标题】:Authorization Headers is missing using c# client使用 c# 客户端缺少授权标头
【发布时间】:2021-03-24 11:15:27
【问题描述】:

我正在使用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没有

【问题讨论】:

    标签: c# django django-rest-framework gunicorn wsgi


    【解决方案1】:

    Authorization 标头丢失的原因是重定向。我很抱歉没有发布我的 Uri 字符串,因为我从来没有认为这是问题所在。

    我的 Uri 字符串是 http://localhost:3000/module?query=123。调用GetAsync 后,Uri 字符串变为http://localhost:3000/module/?query=123(模块后的额外斜线)。所以库检测到它是一个重定向

    所以我的快速修复只是将网址修改为http://localhost:3000/module/?query=123

    想知道是否是重定向引起的可以查看Link

    【讨论】:

      【解决方案2】:

      使用 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();
                      }
                  }
      

      【讨论】:

      • 仍然没有运气,Authentication credentials were not provided.
      • 使用 fiddler 应用程序比较 c# 和 postman 之间的原始 http 请求,看看有什么不同
      猜你喜欢
      • 2018-07-24
      • 2012-10-27
      • 2016-07-15
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2022-06-14
      相关资源
      最近更新 更多