使用 HttpClient,发送没有架构的授权令牌

Posted

技术标签:

【中文标题】使用 HttpClient,发送没有架构的授权令牌【英文标题】:Using HttpClient, send an Authorization token with no schema 【发布时间】: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"); 【参考方案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 正常工作,挽救了我的生命...

以上是关于使用 HttpClient,发送没有架构的授权令牌的主要内容,如果未能解决你的问题,请参考以下文章

我如何从 HttpClient 获取承载令牌?

未通过 HttpClient 请求发送的授权标头

无法使用 Springfox 发送授权承载令牌

微服务架构中的认证授权设计

c# httpclient 授权标头对我不起作用?

设置HttpClient的授权头