如何使用参数从另一个服务调用一个服务并获得响应

How to call one service from another with parameter and get response

目前,我在不同端点有两个服务 运行。例如(这不是我的真实场景):

StudentService
CheckHomeWorkService

CheckHomeWorkService 可用于许多服务(例如 TeacherService, WorkerService)。它有一个带有 CheckHomeWork 动作的控制器。它有一些参数:

HomeWorkNumber (int)
ProvidedSolution (string). 

它将return成功或失败。

现在,在我的 StudentService 中,我有一个带有 SubmitHomeWork 操作的控制器。它需要使用 CHeckHomeWorkService 检查作业并将结果保存到数据库中。我该如何实施?

我正在使用 Ocelot Api GateWay 但它可以 'redirect' 到另一个服务,我需要将响应结果保存到数据库

在你的评论之后你说你有单独的 WEB API 服务

在这种情况下,您可以执行此服务来检索结果:

public async Task<List<HomeWorkModel>> CheckHomeWorkService(int 
homeWorkNumber, string providedSolution)
    {
        using (var httpClient = new HttpClient())
        {
            using (var response = await 
httpClient.GetAsync(Constants.ApiBaseUrl + "/CheckHomeWork?n=" + 
homeWorkNumber + "&sol=" + providedSolution))
            {
                if (response.StatusCode == 
System.Net.HttpStatusCode.OK)
                {
                    string apiResponse = await 
response.Content.ReadAsStringAsync();
                    return 
JsonConvert.DeserializeObject<List<HomeWorkModel>>(apiResponse);
                }
                else
                {
                    return null;
                }
            }
        }
    }
public class HomeworkModel
{
  Public bool Result {get; set;}
}

而 : “Constants.ApiBaseUrl”是另一个 API

的基础 Url 的 http 地址

但在相同的情况下 API 您将使用旧的解决方案:

您可以在控制器构造函数中传递“CHeckHomeWorkService”(“依赖注入”) 并根据需要调用服务方法

如评论中所述,您可以使用HttpClient调用其他API。但是,如果您想要更安全和更高效的解决方案,您也可以使用 HttpClientFactory。 see this why to use it and see the official docu