【发布时间】:2018-08-13 08:56:43
【问题描述】:
我需要在 HttpClient 中添加两个 Authorization 标头,如下所示:
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "XYZNQVJJTkFQUDpX...=");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwToken);
但似乎最后一个会覆盖第一个。
我需要 Basic 和 Bearer 令牌。承载令牌让我通过托管 SAP WebService 的代理服务器,SAP 服务器的基本令牌。在这种情况下,我该怎么办?
更新:
如何编写2个HttpRequestMessage?
string webServiceUrl = "https://adfs.xxx.xxx/";
string strURL = "https://xxx.xxx.xxx/";
HttpResponseMessage responseMessage;
HttpClient client = new HttpClient();
//--1st HttpRequestMessage
var tokenRequest = new HttpRequestMessage(HttpMethod.Post, strURL);
tokenRequest.Headers.Authorization = new AuthenticationHeaderValue("Basic", "XYZNQVJJTkFQUDpX...=");
HttpContent httpContent = new FormUrlEncodedContent(
new[]
{
new KeyValuePair<string, string>("grant_type", "xxx"),
new KeyValuePair<string, string>("client_id", "xxx"),
new KeyValuePair<string, string>("scope", "xxx"),
new KeyValuePair<string, string>("assertion", Base64Assertion)
});
tokenRequest.Content = httpContent;
var tokenResponseMessage = await client.SendAsync(tokenRequest);
var token = await tokenResponseMessage.Content.ReadAsStringAsync();
//-- 2nd HttpRequestMessage
var serviceRequest = new HttpRequestMessage(HttpMethod.Get, webServiceUrl);
serviceRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
var serviceResponseMessage = await client.SendAsync(serviceRequest);
【问题讨论】:
-
我认为 HTTP 规范还允许您只设置一个
Authorization标头。否则,可以在此处指定一个集合。添加多个相同 ID 的 header 似乎没有意义。 -
我需要 Basic 和 Bearer 令牌。承载令牌让我通过托管 SAP WebService 的代理服务器,SAP 服务器的基本令牌。这种情况下,我该怎么办?
-
@MilkBottle 您将需要两个单独的客户端,每个客户端都有自己的默认授权标头,或者一个没有默认值且每个请求都设置授权的客户端。
标签: xamarin.forms dotnet-httpclient