【问题标题】:Calling Multiple WebAPI - ASP.Net MVC调用多个 WebAPI - ASP.Net MVC
【发布时间】:2019-10-16 14:46:32
【问题描述】:

我的任务是从端点 webapi 检索数据并将其显示到 View。 外部网站开发人员为我提供了 2 个端点。

第一个端点是一个数据列表,只有:id、name和year; 第二个是每个项目(通过其 Id 获取),并且我需要使用越来越多的数据详细信息。

到目前为止,我能够调用 第一个端点 并检索所有列表并将其传递给查看...但是过了一会儿我意识到我还需要调用每个 endpoint 项目通过其 id 检索每个项目的全部详细信息...并完成后面我需要通过其 Id 调用第二个 webapi >.

所以到目前为止我的想法是:我需要调用两个 webapi。 第一个得到id列表的, 然后调用第二个 webapi 并使用从第一个 webapi 调用中已检索到的 id 列表来获取每个项目及其详细信息; 因为我无法通过 id 直接调用 webapi,因为列表是来自外部站点的动态列表,并且可以随时从外部 Web 服务器更改。所以我需要先检索列表。

我只需要你的想法,可能还有关于做什么的示例代码!!!

或者如果调用第二个 webapi 是个好主意。

-- 我还注意到调用 webapi 时有延迟,还知道 jquery 很快。--

App工作流程如下:在网站A中,当用户点击一个名为“Vehicle”的按钮时,它必须从网站B调用webapi 获取数据,并在网站 A 的页面中显示这些数据。所以有 网站 A 中的每个项目都没有用户交互。我需要检索所有 >列表 + 详细信息。

下面是我获取整个列表的端点调用。

            HttpClient client = new HttpClient();

            string APIdatas = null;

            HttpResponseMessage response = await client.GetAsync("https://jsonplaceholder.typicode.com/todos/");

            if (response.IsSuccessStatusCode)
            {
                APIdatas = await response.Content.ReadAsStringAsync();
            }

            var stringJson = JsonConvert.DeserializeObject<List<CrowdfundingViewModel>>(APIdatas);

            return View(stringJson);

【问题讨论】:

  • 你应该避免这种情况。您应该显示从第一次 API 调用中获得的名称列表,然后当用户选择一个名称时,您应该为所选 ID 进行第二次 API 调用并在 UI 中显示详细信息。
  • 什么时候需要第二个端点的详细数据列表?是否可以使用来自第一个端点的数据,并且仅在特定项目而不是每个项目需要时才获取第二个端点?
  • 我想这取决于您的用例:如果要求显示所有数据并因此需要进行第二次 api 调用,或者如@ChetanRanpariya 所说的那样按需调用。按需提供更好的性能,因为您只需 get 在需要时提供所需的内容。
  • 如果我从前一页调用 API 并将数据存储在某处会怎样。每当用户请求该页面时,我都会将其传递给该页面。有可能吗?

标签: c# asp.net-mvc asp.net-web-api


【解决方案1】:

我认为基本上你应该只显示从第一个 API 调用中获得的数据并将它们显示在视图中(在网格或其他东西中),并为每一行提供一个详细信息按钮。只有当用户单击详细信息按钮时,您才应该进行第二次 API 调用以获取该记录的更多详细信息并将其显示在单独的视图中。否则,您将需要为每个可能会降低性能的项目调用第二个 API。

【讨论】:

  • 是的,我可以做到,但是...第一个 API 端点只有 3 个项目(id、name 和 year)...而第二个端点有更多详细信息(id、name、year、我想在视图页面上显示的图片、公司、位置、月份、地图和更多详细信息的许多 url。
  • 如果我从前一页调用 API 并将数据存储在某处会怎样。每当用户请求该页面时,我都会将其传递给该页面。
  • 是的,您可以在前一页的单独线程中在后台执行某些操作,以获取所需的数据并将其缓存在某处,否则这会阻止或减慢前一页的加载或交互。您必须采取最适合您的用例的解决方法来超越此限制。
  • 好的,谢谢。我尝试过并使用 TempData 缓存...但是在尝试读取 TempData 时我得到了 null !!!在 ASP.Net MVC 中缓存数据的最佳方式是什么?
  • 在您的模型中引用 System.Web dll 并使用 System.Web.Caching.Cache。看到这个帖子:stackoverflow.com/questions/343899/…
猜你喜欢
  • 2012-04-07
  • 2012-09-21
  • 2013-11-13
  • 2012-10-23
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-06
  • 2013-03-04
相关资源
最近更新 更多