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

时间:2020-04-28 13:03:53

标签: c# rest xamarin basic-authentication dotnet-httpclient

上下文

我想在Xamarin应用程序中使用HtppClient使用Basic身份验证进行简单的API调用。

问题

一段时间以来,我一直没有问题,但是几天之后,它似乎不再起作用。不管我是否签出先前的提交。该请求确实适用于Postman ofc,因此我确定它来自我的代码而不是API。

我尝试同时针对.Net Standard 2.0或2.1,无论做什么,API都告诉我缺少Authorization标头。我什至尝试在请求之前显示myClient.DefaultRequestHeaders.Authorization(授权在那里并且正确),在请求之后显示reponse.RequestMessage.Headers(缺少授权,存在其他标头)。

代码示例

这是我对客户端的初始化:

HttpClient _clientNewApi = new HttpClient();
string authDataNewApi = string.Format("{0}:{1}", username, password);
string authHeaderValueNewApi = Convert.ToBase64String(Encoding.UTF8.GetBytes(authDataNewApi));
_clientNewApi.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authHeaderValueNewApi);
_clientNewApi.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

这是发出请求的代码:

Uri uri = new Uri(recieved_uri);
// _clientNewApi.DefaultRequestHeaders.Authorization is well set
HttpResponseMessage json_response = await _clientNewApi.GetAsync(uri);
// json_response.RequestMessage.Headers does not contain Authorization Header
// json_response.StatusCode is Unauthorized, and the message sent back by the API is "No authentication credentials provided."

我一直在拼命地查看我的代码,并结帐了好几个小时,但没有任何线索,感谢任何线索:)

1 个答案:

答案 0 :(得分:0)

回复有点晚,但我的问题来自发送重定向代码 (3XX) 的 API。

邮递员没有说任何东西就做了重定向,这就是我从未见过它的原因。

该代码也由 HttpClient 自动处理,但授权标头未传输到重定向的请求(我猜是安全原因)。我必须禁用自动重定向才能自己处理并将标头传递给第二个请求。