使用 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,发送没有架构的授权令牌的主要内容,如果未能解决你的问题,请参考以下文章