我正在尝试使用此代码通过https向某些资源发送GET HTTP请求。请求必须包含带有Basic方案的Authorization标头才能进行身份验证:
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true;
using (var client = new HttpClient())
{
string credentials = "dXNlcm5hbWU6cGFzc3dvcmQ=";
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string jsonResponse = await client.GetStringAsync(uri);
return jsonResponse;
}
我面临的问题是,当我提出该网址请求时,我会收到401 Unauthorized响应。查看Fiddler的请求表明请求中没有设置Authorization标头。
如果我向模拟服务器(例如Request Bin)发出请求,则授权标头会通过。
我认为可能在删除我要求的特定资源的授权标题之间存在代理服务器。但是使用Postman从同一台机器发出“相同”的HTTP请求是成功的。
有关从C#发出请求时可能删除Authorization标头的任何想法?提前谢谢!
答案 0 :(得分:0)
最终弄清楚问题是什么。
有些服务器在最后有一个丢失的斜杠时会响应302(重定向),就像我的情况一样。将此与HTTPS在3xx请求之间删除Authorization标头的事实相结合,对服务器的第二个请求(使用斜杠)不包含Authorization标头,因此401。