C# HttpClient设置DefaultRequestHeaders Authorization未随请求发送问题
原HttpClient实现代码
private HttpClient GetHttpClient() { HttpClient client = new HttpClient() { BaseAddress = new Uri(Settings.BaseAddress) }; client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Settings.ApiKey); // 尝试过直接添加头的方式也无效 // client.DefaultRequestHeaders.Add( "Authorization", "Basic " + Settings.ApiKey); return client; } private async Task<string> GetAccount() { using (HttpClient httpClient = GetHttpClient()) { HttpResponseMessage response = await httpClient.GetAsync($"/v1/accounts/{Settings.AccountNumber}"); response.EnsureSuccessStatusCode(); string json = await response.Content.ReadAsStringAsync(); } return await Task.FromResult((string)null); }
已在HttpClient实例上配置了默认的Authorization请求头,但实际发送请求时该头并未被包含在内(注:抓包结果显示请求中无此头)。
更新:改用WebRequest方式仍无效
string authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{Settings.ApiKey}")); // 生成的Base64值为 c2tfbGl2ZV9YREpEUnR2eFVhRmpyMmoydkZJTm9kemE6 // 但Firefox中捕获到的有效授权值是 // c2tfbGl2ZV9YREpEUnR2eFVhRmpyMmoydkZJTm9kemE6dW5kZWZpbmVk authorization = "c2tfbGl2ZV9YREpEUnR2eFVhRmpyMmoydkZJTm9kemE6dW5kZWZpbmVk"; var request = WebRequest.Create($"{Settings.BaseAddress}/v1/accounts/{Settings.AccountNumber}"); // 尝试过用AuthenticationHeaderValue的方式也无效 // AuthenticationHeaderValue h = new AuthenticationHeaderValue("Basic", authorization); request.Headers.Add("authorization", "Basic " + authorization); string text; var rr = (HttpWebResponse)request.GetResponse(); using (var sr = new StreamReader(rr.GetResponseStream())) { text = sr.ReadToEnd(); }
对比验证:wget命令可正常请求
# wget --header="Authorization: Basic c2tfbGl2ZV9YREpEUnR2eFVhRmpyMmoydkZJTm9kemE6" https://api.example.com/v1/accounts/accountNumber --output-document -
以上命令能够成功获取到接口返回内容。
内容的提问来源于stack exchange,提问作者Richard Barraclough
相关产品推荐
相关产品推荐

