我有一个带有ItemsController
动作(Get
)的getItemSellers\{itemId}
,该动作将调用ItemServices
(GetSellers(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
}
]
}
}
答案 0 :(得分:0)
创建一个SellerViewModel类来保存其他信息(或使用您现在拥有的Model)。
我建议使用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
}