API-вызов успешно с внешнего клиента, но не из C#
Мне нужно вызвать клиентский API-HTTPS (GET) с некоторыми конкретными заголовками
Accept:application/json,application/vnd.error+json
Date:2018-10-03T06:52:48Z
Authorization:<SECRETKEY>
В этом сценарии, когда я пытаюсь вызвать его из клиента, такого как Postman или Advanced REST, API дает правильный результат. Но то же самое я попробовал с кодом C#, который генерирует 401-Unauthorized errorcode.
Например, если я использую код почтальона для RestSharp (C#). Это не будет работать из моего кода. Скриншот почтальона:
Даже я попробовал то же самое с HttpWebRequest и HttpClient тоже. Но не повезло.
Код, который почтальон предоставил из раздела кода, как показано ниже, содержит некоторую конфиденциальную информацию, которую я не могу раскрыть.
var client = new RestClient("https://**CLIENT_API_PATH**");
var request = new RestRequest(Method.GET);
request.AddHeader("Postman-Token", "ef8c2a79-a501-4cef-aa2e-bacdc9d3a922");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Authorization", "**SECRET_KEY**");
request.AddHeader("Date", "2018-10-03T06:52:48Z");
request.AddHeader("Accept", "application/json,application/vnd.error+json");
IRestResponse response = client.Execute(request);
В приведенном выше коде 3 параметра являются обязательными и должны быть переданы для успешного вызова API.
Дата только в вышеуказанном формате.
Принять только с вышеупомянутой строкой.
Авторизация с определенной аутентификацией (настраивается клиентом).
Согласно предложенному комментарию я также добавляю данные скрипача из звонка.
1 ответ
Попробуй это.
public static string Get(Uri uri, string token)
{
string responseString = string.Empty;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
request.Method = "GET";
request.ContentType = "application/json;charset=utf-8";
request.Headers.Add("Authorization", string.Format("Bearer {0}", token));
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (Stream responseStream = response.GetResponseStream())
{
StreamReader responseReader = new StreamReader(responseStream);
responseString = responseReader.ReadToEnd();
}
}
return responseString;
}