【问题标题】:HttpClient not accepting Authorization headers (401 Unauthorized)?HttpClient 不接受授权标头(401 未授权)?
【发布时间】:2018-06-28 06:56:10
【问题描述】:

我正在创建一个 Xamarin.Forms 移动应用程序,它以 Android 为目标,使用 .NET Standard 作为我的代码共享方法。不幸的是,我使用的 API 在 Postman 中有效,但在 C# 中使用 System.Net.Http 中的 HttpClient 无效。

邮递员请求使用此标头:

我尝试了 3 种不同的方法,但它们仍然返回“401 未授权”。我还检查了我的 Android Manifest 文件中的 INTERNET 权限。

HttpClient.DefaultRequestHeaders.Add("Authorization", "Token e2eeb1aa9f32eb0ekgn353b6fadb772");
HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Token", "e2eeb1aa9f32eb0ekgn353b6fadb772");
HttpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Token e2eeb1aa9f32eb0ekgn353b6fadb772");

【问题讨论】:

  • 尝试添加对HttpClient.DefaultRequestHeaders.Clear();的调用以确保其中没有任何其他标题。
  • 我也试过了,没用。
  • 另外,“令牌”似乎很奇怪。通常这是“承载者”?
  • 是的,通常它是 Bearer,但是当我使用 Bearer 时,它会抛出一个错误。它只能通过使用 Authorization: Token 作为标题来工作(在 Postman 中)。
  • 我的答案中的解决方案有效吗?

标签: c# android api xamarin.forms


【解决方案1】:

请确保您的 HTTP 请求 URL 正确与否。有时您可能需要一个尾随 反斜杠 ( '/' )。 如果您在 HTTP 客户端 中错过了它,将无法使用,但 POSTMAN 会。

【讨论】:

  • 是的,由于缺少反斜杠,我浪费了 1 小时研究 401 错误消息............
  • Postman 对 http 和 https 也很宽容——在我的情况下,C# 需要使用 https。
【解决方案2】:

尝试在HttpRequestMessage 上设置标题:

request.Headers.Authorization = new 
    AuthenticationHeaderValue("Bearer","e2eeb1aa9f32eb0ekgn353b6fadb772");

【讨论】:

  • 这个答案今天帮助了我。我之前在client.DefaultRequestHeaders 级别上设置了授权标头,这不起作用。
【解决方案3】:

在我的情况下,当我在 AuthenticationHeaderValue 中设置基本身份验证时已修复。

var authToken = Encoding.ASCII.GetBytes(_UserName + ":" + _Password);
client.DefaultRequestHeaders.Authorization= new AunthenticationHeaderValue("Basic", Convert.ToBase64String(authToken));

【讨论】:

    猜你喜欢
    • 2012-04-04
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2015-01-27
    • 2018-08-28
    相关资源
    最近更新 更多