API-вызов успешно с внешнего клиента, но не из C # - PullRequest
0 голосов
/ 03 октября 2018

Мне нужно вызвать клиентский API-HTTPS (GET) с некоторыми конкретными заголовками

Accept:application/json,application/vnd.error+json
Date:2018-10-03T06:52:48Z
Authorization:<SECRETKEY>

В этом сценарии, когда я пытаюсь вызвать его из клиента, как Почтальон или Расширенный REST клиент , API дают правильный результат.Но то же самое я попробовал с кодом C #, который генерирует 401-Unauthorized errorcode.

Например, если я использую код почтальона для RestSharp (C #).Это не будет работать из моего кода.Скриншот почтальона:
Postman screenshot

Даже я пытался сделать то же самое с 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. Запрос кода вызова API C #от fiddler скриншот fiddler
  3. Результат отладки кода C # скриншот отладки visual studio

1 Ответ

0 голосов
/ 03 октября 2018

Попробуйте это.

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;
}
...