Сбой запроса WebClient GET с 401 несанкционированным - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь сделать запрос GET API с приведенным ниже кодом C #, но он не работает с

System.Net.WebException: The remote server returned an error: (401) Unauthorized.
   at System.Net.WebClient.DownloadDataInternal(Uri address, WebRequest& request)
   at System.Net.WebClient.DownloadString(Uri address)
   at System.Net.WebClient.DownloadString(String address)
   at Rextester.Program.callAPI()
   at Rextester.Program.Main(String[] args)

Обратите внимание, что тот же запрос API работает через почтальон .

private static void callAPI()
{

    WebClient client = new WebClient();
    client.UseDefaultCredentials = false;            

    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;

    client.Headers.Add("Authorization", "Basic " + Base64Encode("<id:password>"));            
    client.Headers.Add("Content-Type", "application/json");   
    client.Headers.Add("Environment-Id", "325");

    client.QueryString.Add("query", "%7B%7D");

    string reply = client.DownloadString("https://<server-api-url>");

    Console.WriteLine(reply);
}        


private static string Base64Encode(string plainText)
{
    var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);
    var encodedS = System.Convert.ToBase64String(plainTextBytes);
    Console.WriteLine(encodedS);
    return encodedS;
}

Еще один странный факт: я вижу исключение, напечатанное перед закодированной строкой. Я должен думать наоборот. Закодированная строка должна быть напечатана до того, как вызов метода произойдет до вызова API.

1 Ответ

0 голосов
/ 22 ноября 2018

Получив руководство от @Panagiotis Kanavos, я отследил вызовы API от Fiddler и понял, что вызов API перенаправляется (код состояния http - 307).Клиент C # по умолчанию настроен так, чтобы не передавать заголовок авторизации при перенаправлении.Следовательно я получил 401 Несанкционированную ошибку. исправлено путем добавления проверки кода состояния 401 и повторной отправки запроса API с заголовком авторизации.

Спасибо @Panagiotis Kanavos за помощь

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