Как передать ответ HttpClient с ответом web api в asp. net core - PullRequest
0 голосов
/ 14 апреля 2020

У меня есть проект Rest API, который был написан на asp. net core 3.1. В этом проекте у меня есть некоторые простые данные из внутреннего сервиса и некоторые удаленные данные, полученные из удаленного API.

Тип ответа удаленного API - JSON, и я предпочитаю не приводить ответ к объекту. Я не хочу, чтобы проект API зависел от типа структуры удаленного объекта API, только получал данные и передавал эти данные в формате JSON клиенту API.

Как я могу объединить эти данные в ответ API ?

public class VideoDto
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
}

REST API

private readonly IVideoQueryManager _videoQueryManager;

public async Task<ActionResult<object>> Get(int id)
{
    var videoDto = await _videoQueryManager.Get(id)

    using var client = new HttpClient();

    var response = await client.GetAsync($"http://example.com/videos/{id}/commments");

    string responseBody = await response.Content.ReadAsStringAsync();

    return new
    {
        videoDto = videoDto,
        comments = //How set responseBody here???
    };
}

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

API - это прикладное программирование интерфейс . Другими словами, объектные структуры возвращают функцию так же, как и интерфейс на основе кода. Таким образом, вы можете и должны иметь класс в клиентском приложении, который «реализует» интерфейс, давая вам что-то для привязки данных.

С точки зрения API, просто как основанный на коде интерфейс не должен изменяться после публикации, а также структура данных, возвращаемая API. Если требуются изменения, необходимо опубликовать новую версию, а затем всем клиентам должно быть дано предупреждение об устаревании и предложено обновить свой код, чтобы учесть эти изменения до того, как фактически вступят в силу. Затем вы, как потребитель API, просто измените свой класс в соответствии с новой версией.

Длинно и коротко, просто создайте класс для представления данных и десериализации в них. Вот как это работает, и в этом нет ничего плохого.

0 голосов
/ 14 апреля 2020

Зависит от того, что возвращает ваш API, не так ли?

  • Если это прямая строка, вы можете использовать GetStringAsync вместо этого и получить прямую строку из ответа.
  • Если это объект JSON, вы можете декодировать его с помощью синтаксического анализатора JSON и извлечь правильное поле.

В качестве примечания вы должны возвращать IAsyncResult в современном ASP. NET MVC Core, ваш тип возврата - старый тип возврата - обратите внимание, в частности, что object бесполезен, поскольку вы вообще не определяете тип возвращаемого значения.

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