C# 如何使用HttpClient进行基本身份验证&;API密钥头在一起
我已经用HttpWebRequest做了同样的尝试,效果很好,但我需要在我的程序中使用HttpClient 到目前为止,我没有以下代码,但其返回未经授权C# 如何使用HttpClient进行基本身份验证&;API密钥头在一起,c#,rest,api,C#,Rest,Api,我已经用HttpWebRequest做了同样的尝试,效果很好,但我需要在我的程序中使用HttpClient 到目前为止,我没有以下代码,但其返回未经授权 string baseurl = "http://xxxxx.net/"; var byteArray = Encoding.ASCII.GetBytes("myusername:mypassword"); webclient.DefaultRequestHeaders.Authorization
string baseurl = "http://xxxxx.net/";
var byteArray = Encoding.ASCII.GetBytes("myusername:mypassword");
webclient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
webclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("X-ApiKey", "=" + "5AB4374B-A5CF-4F7A-91FF-E5E893347C3F");
webclient.BaseAddress = new Uri(baseurl);
webclient.DefaultRequestHeaders.Clear();
webclient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
问题在于:
webclient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
webclient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("X-ApiKey", "=" + "5AB4374B-A5CF-4F7A-91FF-E5E893347C3F");
第二个正在覆盖第一个,因此基本身份验证不会发生。如果您希望在请求中包括X-ApiKey
头以及使用基本身份验证,则不要使用DefaultRequestHeaders.Authorization
来设置X-ApiKey
头。改为使用DefaultRequestHeaders.Add
,它允许您添加所需的任何HTTP头:
webclient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
webclient.DefaultRequestHeaders.Add("X-ApiKey", "5AB4374B-A5CF-4F7A-91FF-E5E893347C3F");
我从代码中删除了
“=”+
,因为=
是自动添加的。但是如果=
实际上是API密钥的一部分,那么将其添加回去。尽管如此,我还是收到了未经授权的错误,但是web请求工作正常
var httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Headers["X-ApiKey"] = "5AB4374B-A5CF-4F7A-91FF-E5E893347C3F";
String encoded = Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes("myusername" + ":" + "mypassword"));
httpWebRequest.Headers.Add("Authorization", "Basic " + encoded);
您正在用第二条语句替换
webclient.DefaultRequestHeaders.Authorization
。另外,您的第二条语句也很特殊,为什么值的前缀是=
?您删除=
有什么原因吗?@DavidG我添加了一个解释。我以为这是误会,但也许不是。