如何从asp.net核心中的一个控制器动作调用2个API?

时间:2019-07-05 22:36:23

标签: c# asp.net-core

我有一个带有ItemsController动作(Get)的getItemSellers\{itemId},该动作将调用ItemServicesGetSellers(itemId))中的方法并获得卖方列表从第三方API出售特定商品,我解析并创建了Item模型。我想调用另一个API以获得每个卖家的评分,并将其添加到我的Item model中。最终,我要从一个API中获取大量信息并将其转换为一个模型,然后要使用从另一个API中获取的信息来更新该模型。任何人都有一个想法如何最好地做到这一点?我没有将任何内容保存到数据库中,只是将模型的外观传递给客户端。

基本上,在第一次API调用之后:

{ 
   data: 
      { 
          itemId: 123, 
          sellers: [
              { 
                  seller1: abc 
              }, 
              { 
                  seller2: abc
              }
          ] 
      }
}

第二次API调用之后,我想返回到控制器的内容:

{ 
   data: 
      { 
          itemId: 123, 
          sellers: [
              { 
                  seller1: abc,
                  rating: 5
              }, 
              { 
                  seller2: abc,
                  rating: 3
              }
          ] 
      }
}

1 个答案:

答案 0 :(得分:0)

  1. 创建一个SellerViewModel类来保存其他信息(或使用您现在拥有的Model)。

  2. 我建议使用JsonServiceClient(在ServiceStack.Client程序包中)反序列化计划调用的卖家评分API。

用法示例(针对每个卖方)

using(var client = new JsonServiceClient("http://api.seller-ratings.com")
{
    // assuming SellerRatingModel has SellerID and Rating properties
    var result = client.Get<SellerRatingModel>("/sellers/1");
    // Do assignment here
}

我应该指出,对于每个卖方来说,http调用都非常昂贵,因此,最好将一系列卖方ID传递给评级API,并一次性获得所需的所有信息。然后,您可以使用第一个api中的数据进行linq连接。当然,您的Rating API需要支持此功能

using(var client = new JsonServiceClient("http://api.seller-ratings.com")
{
    // assuming SellerRatingModel has SellerID and Rating properties
    var result = client.Get<IEnumerable<SellerRatingModel>>("/sellers?Ids=1,2,3,4,5");
    // Do assignment here
}