Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用HttpClient进行基本身份验证&;API密钥头在一起_C#_Rest_Api - Fatal编程技术网

C# 如何使用HttpClient进行基本身份验证&;API密钥头在一起

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

我已经用HttpWebRequest做了同样的尝试,效果很好,但我需要在我的程序中使用HttpClient 到目前为止,我没有以下代码,但其返回未经授权

        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我添加了一个解释。我以为这是误会,但也许不是。