HttpRequestMessage 不允许 Authorization 标头值

Posted

技术标签:

【中文标题】HttpRequestMessage 不允许 Authorization 标头值【英文标题】:HttpRequestMessage won't allow Authorization header value 【发布时间】:2018-10-10 16:37:31 【问题描述】:

我正在尝试重用我的 HttpClient 实例,这是最佳做法。因此,在一个特定请求中,我想在请求中设置 Authorization 标头,而不是在客户。从我读过的所有内容来看,这应该可行:

var request = new HttpRequestMessage(HttpMethod.Get, url);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
var response = await _client.SendAsync(request);

这会编译,但是当我尝试调用它时会抛出。我得到的例外是:

"错误的标头名称。确保请求标头与 HttpRequestMessage,带有 HttpResponseMessage 的响应标头,以及 带有 HttpContent 对象的内容标头。”

我很困惑为什么允许我在请求消息上设置这个值,如果它只是要抛出,我也没有找到解决方法。 我尝试使用TryAddWithoutValidation 直接添加标题,但我仍然得到相同的异常(甚至没有像我期望的那样返回 false!)

我怀疑这可能是框架中的一个错误,因为很多人都发布了这个确切的代码,没有明显问题,但会对任何见解/解决方法感兴趣。

【问题讨论】:

客户端是否已经设置了默认授权标头? 哪一行准确地引发了错误。发送还是当你设置标题? 好的,去挖掘源代码,看看设置该属性时会发生什么 好的。乐意效劳。我建议删除这个问题。 好的,请注意。你检查TryAddWithoutValidation 的布尔结果是否返回true? 【参考方案1】:

事实证明,由于另一个错误,“token”的值为 null。如果您遇到此问题,我建议您先检查一下:请注意,错误消息是 100% 的谎言。

【讨论】:

以上是关于HttpRequestMessage 不允许 Authorization 标头值的主要内容,如果未能解决你的问题,请参考以下文章

HttpRequestMessage.Content 带有无效和不可读的字符

如何发送带有 HttpRequestMessage 的证书?

HttpClient 标头与 HttpRequestMessage 标头

HttpRequestMessage.CreateResponse 抛出 ***Exception

重新发送 HttpRequestMessage - 异常

HttpRequestMessage 多个自定义标头相互覆盖