Xamarin.forms 如何在HttpClient中添加两个授权头
我需要在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); 但似乎最后一个将覆盖第一个 我需
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进行身份验证。我错过什么了吗?