Я пытаюсь сделать запрос API GET с приведенным ниже кодом С#, но он не работает с
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.
"<id:password>"
? В обычной аутентификации строка должна бытьusername:password
, например$"{username}:{password}"
илиusername + ":" + password
илиString.Format("{0}:{1}", username,password)
- person Panagiotis Kanavos   schedule 19.11.2018<>
или нет? Если да, то это ошибка. Если нет, то ничто другое не поможет понять, что не так. Как должен выглядеть запрос? Как выглядел запрос почтальона в Fiddler? Как выглядел WebClient? Если заголовки аутентификации отличаются, вы будете знать, чтоBase64Encode
методы неверны. Если есть другое различие, в чем оно? - person Panagiotis Kanavos   schedule 19.11.2018