如何将HttpClient用于基本身份验证和API密钥标头

时间:2018-12-06 15:33:40

标签: c# rest api

我已经尝试使用HttpWebRequest进行相同的工作,但是我需要在程序中使用HttpClient 到目前为止,我确实遵循了以下代码,但是未经授权返回了

updateItem(newItem){
  for (let i = 0; i < this.itemsArray.length; i++) {
      if(this.itemsArray[i].id == newItem.id){
        this.users[i] = newItem;
      }
    }
}

2 个答案:

答案 0 :(得分:3)

问题在这里:

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密钥的一部分,则将其重新添加。

答案 1 :(得分:0)

仍然,我收到未授权的错误,但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);