Как использовать HttpClient для базовой аутентификации и заголовка ключа API вместе - PullRequest
0 голосов
/ 06 декабря 2018

Я попробовал то же самое с 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"));

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Тем не менее я получаю несанкционированную ошибку, но веб-запрос работает нормально

            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);
0 голосов
/ 06 декабря 2018

Проблема здесь:

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-ключа, добавьте его обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...