首页 > 解决方案 > 使用 WEB API HttpClient 使用外部 API 然后以角度显示反序列化结果是否可以接受?

问题描述

我需要检索 JSON 提要的内容。我想HttpClient用于下载内容。为此,我创建了一个 WEB API 控制器,其Get方法使用外部 API,HttpClient然后返回List反序列化内容:

using (HttpClient client = new HttpClient())
{
    client.BaseAddress = new Uri("externalAPI");
    MediaTypeWithQualityHeaderValue contentType =
                new MediaTypeWithQualityHeaderValue("application/json");
    client.DefaultRequestHeaders.Accept.Add(contentType);
    HttpResponseMessage response = await client.GetAsync(client.BaseAddress);
    string content = await response.Content.ReadAsStringAsync();
    List<MyClass> data = JsonConvert.DeserializeObject<List<MyClass>>(content);
    return data;
}

现在我将使用 Angular 在客户端显示这个列表,我知道我应该如何执行这些步骤,但我的问题是为什么我应该使用 WEB API 来使用另一个外部 API,因为我可以简单地使用 AngularHttpClient来使用那个外部 API ? 是否使用此 WEB API 来使用外部 API,然后将 a 返回List给 Angular 被视为最佳实践?如果不是,最好的方法是什么,如果我必须为此目的使用 MVC

标签: c#asp.net-mvcangularasp.net-web-apiasp.net-core-mvc

解决方案


在我的项目中,我通过 webapi 使用了外部 API(它返回 json 数据)。

我这样做是因为我的 Angular 项目只需要维护对 webapi 的引用,即只有一个 url。我项目中的另一种情况是 Dev、UAT 和 prod 环境中的外部 api url 更改,所以我不想在我的 angular 项目中维护。

所以我这样做有两个原因

  1. 不想维护外部 api 的引用(即外部 api 的 URL),我只有一个联系人来获取我的项目中的数据,即我的 webapi
  2. Dev、UAT 和 PROd 中外部 API 更改的 URL,因此我不想在我的 Angular 项目中维护该信息。
  3. 这使我的 Angular 代码更易于维护,就好像其他人查看我的代码一样,他/她得到的信息是 webapi 是他们应该寻找的唯一位置,数据来自哪里

想象一下您从多个外部 API 获取数据的场景,在这种情况下,您必须维护对 Angualr 项目中所有 API 的引用。所以最好遵循FACADE 设计模式,并且只保留一个点(在这种情况下是哪个 WebAPI)与所有外部 api 连接并返回数据。


要每 10 分钟获取一次数据,您需要使用 RxJs

var timer$ = Rx.Observable.interval(1000) // 1000 = 1 second

timer$
  .subscribe((v)=> this.Service.CalltoExtnerlAPIToGetdata()
             .subscribe(data=> this.values = data));

当您不打算使用 Rxjs Timer 以避免内存泄漏时,请取消订阅它。http://brianflove.com/2016/12/11/anguar-2-unsubscribe-observables


推荐阅读