【问题标题】:Using HttpClient, send an Authorization token with no schema使用 HttpClient,发送没有架构的授权令牌
【发布时间】:2017-07-01 17:04:26
【问题描述】:

注意:此问题类似于this one,但其建议的答案不适用于此处。

我正在尝试访问this API,它正在寻找如下所示的标头:

Authorization: {token}

请注意没有任何身份验证方案。

我已经尝试过:

myHttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("", authToken);

这导致 ArgumentException 说我不能传递空字符串。

我也都试过了:

myHttpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue(authToken);

myHttpClient.DefaultRequestHeaders.Add("Authorization", authToken);

这两者都会导致 FormatException。

似乎有些东西迫使我遵守授权标头的标准格式,但我尝试访问的服务不使用该标准格式。

【问题讨论】:

  • 尝试添加接受的类型 myHttpClient.DefaultRequestHeaders.Add("Accept", "application/json");

标签: c# asp.net-web-api dotnet-httpclient


【解决方案1】:

你可以试试:

request.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", token));

https://msdn.microsoft.com/en-us/library/hh875106(v=vs.118).aspx中所述

【讨论】:

  • 花了 2 个小时使 HttpRequest 工作......我需要在没有架构的情况下使用它。很好......它现在可以工作了!
【解决方案2】:

就像经常发生的那样,在我提出问题后,我立即找到了答案。

HttpClinet 要求我遵循的标准格式是 Http 协议本身,它需要一个身份验证方案,但是有一个变通方法。

代替:

myHttpClient.DefaultRequestHeaders.Add("Authorization", authToken);

你可以使用:

myHttpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", authToken);

它忽略了 Http 标准,只允许您根据需要添加标头。

【讨论】:

  • 呵呵呵呵...经过 2 小时的反复试验,让 HttpRequest 正常工作,挽救了我的生命...
猜你喜欢
  • 2023-04-01
  • 2016-10-31
  • 2018-03-28
  • 1970-01-01
  • 2018-07-04
  • 2019-02-24
  • 2020-07-16
  • 1970-01-01
  • 2019-03-15
相关资源
最近更新 更多