Xamarin.forms 如何在HttpClient中添加两个授权头

Xamarin.forms 如何在HttpClient中添加两个授权头,xamarin.forms,dotnet-httpclient,Xamarin.forms,Dotnet Httpclient,我需要在HttpClient中添加两个授权头,如下所示: client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "XYZNQVJJTkFQUDpX...="); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwToken); 但似乎最后一个将覆盖第一个 我需

我需要在HttpClient中添加两个授权头,如下所示:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "XYZNQVJJTkFQUDpX...=");
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwToken);
但似乎最后一个将覆盖第一个


我需要基本的不记名代币。用于我通过代理服务器的承载令牌,代理服务器承载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);
string webServiceUrl=”https://adfs.xxx.xxx/";
字符串strURL=”https://xxx.xxx.xxx/";
HttpResponseMessage-responseMessage;
HttpClient=新的HttpClient();
//--第一条HttpRequestMessage
var tokenRequest=newhttprequestmessage(HttpMethod.Post,strURL);
tokenRequest.Headers.Authorization=新的AuthenticationHeaderValue(“基本”、“xyznqvjtkfqudpx…”);
HttpContent HttpContent=新FormUrlEncodedContent(
新[]
{
新的KeyValuePair(“授权类型”,“xxx”),
新的KeyValuePair(“客户端id”、“xxx”),
新的KeyValuePair(“范围”、“xxx”),
新的KeyValuePair(“断言”,Base64Assertion)
});
tokenRequest.Content=httpContent;
var tokenResponseMessage=await client.sendsync(tokenRequest);
var token=await tokenResponseMessage.Content.ReadAsStringAsync();
//--第二条HttpRequestMessage
var serviceRequest=新的HttpRequestMessage(HttpMethod.Get,webServiceUrl);
serviceRequest.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,令牌);
var serviceressemessage=await client.sendsync(serviceressemessage);

它必须更多地使用HTTP。不可能通过多个

在这种情况下,我应该怎么做

您需要两个独立的客户端,每个客户端都有自己的默认授权标头

client1.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "XYZNQVJJTkFQUDpX...=");
client2.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", jwToken);
或者一个没有默认值且每个请求都设置了授权的客户端

比如说

var tokenRequest = new HttpRequestMessage(HttpMethod.Post, authServerUrl);
tokenRequest.Headers.Authorization = new AuthenticationHeaderValue("Basic", "XYZNQVJJTkFQUDpX...=");

var 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 responseMessage.Content.ReadAsStringAsync();

var serviceRequest = new HttpRequestMessage(HttpMethod.Get, webServiceUrl);
serviceRequest.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);

var serviceResponseMessage = await client.SendAsync(serviceRequest);  

//...
var-tokenRequest=newhttprequestmessage(HttpMethod.Post,authServerUrl);
tokenRequest.Headers.Authorization=新的AuthenticationHeaderValue(“基本”、“xyznqvjtkfqudpx…”);
var httpContent=new FormUrlEncodedContent(
新[]
{
新的KeyValuePair(“授权类型”,“xxx”),
新的KeyValuePair(“客户端id”、“xxx”),
新的KeyValuePair(“范围”、“xxx”),
新的KeyValuePair(“断言”,Base64Assertion)
});
tokenRequest.Content=httpContent;
var tokenResponseMessage=await client.sendsync(tokenRequest);
var token=await responseMessage.Content.ReadAsStringAsync();
var serviceRequest=新的HttpRequestMessage(HttpMethod.Get,webServiceUrl);
serviceRequest.Headers.Authorization=新的AuthenticationHeaderValue(“承载者”,令牌);
var serviceressemessage=await client.sendsync(serviceressemessage);
//...

我认为HTTP规范还允许您只设置一个
授权
头。否则,可以在此处指定一个集合。添加相同ID的多个头似乎没有意义。我需要基本和承载令牌。用于我通过代理服务器传递的承载令牌,代理服务器承载SAP WebService,这是SAP服务器的基本令牌。在这种情况下,我应该怎么做?@MilkBottle您需要两个独立的客户端,每个客户端都有自己的默认授权头,或者一个客户端没有默认值,每个请求都有授权集。我刚刚更新了代码。您能告诉我如何在一个HttpClient下编写2条HttpRequestMessage并发送吗?谢天谢地,它似乎不起作用。此webServiceUrl用于ADF进行身份验证。我错过什么了吗?