C# - ответ API процесса - PullRequest
       10

C# - ответ API процесса

1 голос
/ 13 апреля 2020

Я пытаюсь сделать запрос API, используя C# класс HttpClient.

Мне удалось получить ответ OK на запрос API, но теперь я хочу обработать этот ответ, чтобы получить пользователя info.

Это мой код:

 private async void GetRefreshToken()
    {
        using (var httpClient = new HttpClient())
        {
            using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://www.strava.com/oauth/token"))
            {
                var multipartContent = new MultipartFormDataContent();
                multipartContent.Add(new StringContent(CONSTANTS.CLIENT_ID), "client_id");
                multipartContent.Add(new StringContent(CONSTANTS.CLIENT_SECRET), "client_secret");
                multipartContent.Add(new StringContent(userCtrl.StravaAuthToken), "code");
                multipartContent.Add(new StringContent(""), "grant_type");
                request.Content = multipartContent;

                var response = await httpClient.SendAsync(request);                   
            }
        }
    }      

Переменная отклика, обработанная для строки, возвращает следующее:

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
  Transfer-Encoding: chunked
  Connection: keep-alive
  X-Download-Options: noopen
  Status: 200 OK
  X-Request-Id: d9fc7423-4d6b-2342-9d3a-614fd583e008
  Referrer-Policy: strict-origin-when-cross-origin
  X-FRAME-OPTIONS: DENY
  X-Content-Type-Options: nosniff
  X-Permitted-Cross-Domain-Policies: none
  Vary: Origin
  X-XSS-Protection: 1; mode=block
  Cache-Control: must-revalidate, max-age=0, private
  Date: Mon, 13 Apr 2020 11:08:57 GMT
  ETag: W/"01b8306a9b65e970f36bacbec682342f9"
  Via: 1.1 linkerd
  Content-Type: application/json; charset=utf-8
}

Но, как я проверял в Postman, содержимое из ответ API должен выглядеть следующим образом. Я хочу получить refre sh и токены доступа:

{
"token_type": "Bearer",
"expires_at": 1586793993,
"expires_in": 18150,
"refresh_token": "a6a5s7d5as8dasdad75a7d5757a5d7asd67576ae",
"access_token": "a9sdas87da9s8d7asd9a7s9d7as9d7as7d97asd7",
"athlete": {
    "id": 878960,
    "username": "username",
    "resource_state": 2,
    "firstname": "Name",
    "lastname": "Lastname",
    "city": null,
    "state": null,
    "country": null,
    "sex": "M",
    "premium": false,
    "summit": false,
    "created_at": "2019-08-01T14:53:11Z",
    "updated_at": "2019-08-01T14:54:00Z",
    "badge_type_id": 0,
    "profile_medium": "https://lh3.googleusercontent.com/a-/AOh14dfgdfg233WZ_rdRmLMbLnqKKoytbxH-UBm",
    "profile": "https://lh3.googleusercontent.com/a-/AOh14GhrEsdfgs3WZ_rdRmLMbLnqKKoytbxH-UBm",
    "friend": null,
    "follower": null
}

}

Я думаю, что с моим кодом я получаю статус только из запроса API, но не это содержание. Если да, как я могу получить контент из запроса API и проанализировать его в формате json?

Спасибо, я на 100% новичок в мире API, поэтому, пожалуйста, дайте простые объяснения: D

Спасибо!

1 Ответ

2 голосов
/ 13 апреля 2020

Чтобы получить строку json, используйте await response.Content.ReadAsStringAsync(). Затем вы можете проанализировать его как строку json и найти маркер (Json. NET может помочь).

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