【问题标题】:How to call an API inside another API on ASP.NET Core 2.1如何在 ASP.NET Core 2.1 上的另一个 API 中调用 API
【发布时间】:2021-09-09 21:07:28
【问题描述】:

我正在使用在 ASP.NET Core 2.1 中作为控制台应用程序构建的解决方案,但它的工作方式类似于 Web API。我需要调用一个也在 ASP.NET 中创建的外部 API,通过在此系统中创建一个 API 来接收 JSON 格式的数据,以获取值并将它们重新组织到不同的表中。

基本上,我需要用另一个 API 调用一个 API。有什么办法可以做到这一点?,我该怎么做?我尝试了很多在网上找到的代码,但由于 ASP.NET Core 版本,似乎没有一个可以工作。

提前致谢

【问题讨论】:

  • 因为 ASP.NET 核心版本而无法工作?您将不得不提供更多详细信息,可能还需要提供一些代码才能获得帮助。您的解决方案 A,需要调用外部 API B。您应该能够简单地向 API B 发出标准请求。我不清楚您是简单地调用外部 API(http 请求)还是尝试将两者集成解决方案,以便您可以直接访问 B。
  • 我只是想通过 HttpRequest 或类似的方式调用外部 API。我尝试过使用 WebRequest 并没有正常工作。您希望我发布什么样的代码?以便我查找并更新问题。
  • 发布您尝试但不起作用的代码。它至少应该让其他人知道你是否只是犯了一个错误,或者你是否应该尝试一种完全独立的方法。

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


【解决方案1】:

最简单的方法是使用built-in HTTP Client

但如果您正在寻找性能并且可以升级您的 dotnet 版本,您可能会对 Http2 gRPC protocol 感兴趣。

【讨论】:

  • 请添加更多详细信息以扩展您的答案,例如工作代码或文档引用。
【解决方案2】:

正如其他人提到的使用/注入 http 客户端

  • 在 ConfigureServices 中的 Startup.cs 中执行以下操作:
services.AddHttpClient("THE_Client", c =>
{
    c.BaseAddress = new Uri(Configuration.GetValue<string>("ClientURL"));
});
  • 在您的控制器中(您要调用其他 API 的地方)添加构造函数注入:
public TheController(HttpClientFactory clientFactory)
{
    _clientFactory = clientFactory ?? throw new ArgumentNullException(nameof(clientFactory));
}
  • 使用http客户端
// Create client
HttpClient client = _clientFactory.CreateClient("THE_Client");

// send request
var builder = new UriBuilder(client.BaseAddress)
{
    Path = "api/v1/ENDPOINT"
};

var request = new HttpRequestMessage
{
    RequestUri = builder.Uri,
    Method = HttpMethod.Post,
    Content = "blah"
};
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();

【讨论】:

    【解决方案3】:

    嗯,这很容易。基本上你需要Consume Api using RestSharp

    步骤很简单:

    1. 添加 RestSharp
    2. 使用适当的 URL 实例化 RestClient
    3. 设置请求正文/标头
    4. 检索响应并解析它

    【讨论】:

      猜你喜欢
      • 2018-03-15
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多