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. Дата только в вышеуказанном формате.

  2. Принять только с вышеупомянутой строкой.

  3. Авторизация с определенной аутентификацией (настраивается клиентом).

Согласно предложенному комментарию я также добавляю данные скрипача из звонка.

  1. Почтальон запросить выборку из скриншота скрипача скрипача
  2. Запрос кода вызова C# api из скриншота скрипача fiddler
  3. Результат отладки кода на C#

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;
}
Другие вопросы по тегам