.Net 核心:Rest API 正在获取超时 504 状态代码

Posted

技术标签:

【中文标题】.Net 核心:Rest API 正在获取超时 504 状态代码【英文标题】:.Net core: Rest API is getting Time out 504 status code 【发布时间】:2020-04-01 09:00:30 【问题描述】:

我在 .NET Core 中开发了一个 API,它使用了 4 个休息服务 API。这在我的本地机器上运行良好,响应在 6 秒内返回。但是,当我部署了相同的 API 并从 Postman 运行时,我遇到了超时错误 (504)。通过 curl 命令在服务器中运行相同的 API curl -vvv http://localhost:8080/api/check,耗时超过 6 分钟,出现 500 个内部服务器错误。

本地机器响应:

status code: 200

    "Message": "OK",
    "Version": "1.0.0.0",
    "Path": "https://test.api.com/api/check",
    "Data": 
        "user/data": 200,
        "market/history": 200,
        "Content/Id": 200,
        "market/history/time": 200
    

服务器中的Curl命令:

status code: 500

    "Message": "OK",
    "Version": "1.0.0.0",
    "Path": "https://test.api.com/api/check",
    "Data": 
        "user/data": 0,
        "market/history": 0,
        "Content/Id": 0,
        "market/history/time": 0
    

邮递员:

https://test.api.com/api/check 状态码:504 网关超时

我在configureservices方法的.net核心中创建了httpclient的单例范围

var client = new HttpClient

    BaseAddress = new Uri("https://test.api.com/")
;

client.DefaultRequestHeaders.Accept.Add(new 
MediaTypeWithQualityHeaderValue("application/json"));
client.DefaultRequestHeaders.TryAddWithoutValidation("Key", "XYZ");
services.AddSingleton<HttpClient>(client);

我无法理解这里的问题出在哪里,为什么当我们通过邮递员运行时它会超时,而从服务器(通过 curl)运行时它会超时,并且在本地机器上工作正常。

【问题讨论】:

不要使用 HttpClient-singleton。参考this article。 您是否应该在部署服务器中为您的 API 启用代理? 我试过了,结果还是一样。 /api/check 在您的本地计算机上究竟做了什么会占用整整 6 秒的时间?对于“检查”方法来说,这似乎太长了。 它正在调用所有 6 个 API 并获得所有 6 个响应。之后,如果所有 6 个都带有 200 个状态代码,则表示成功。 【参考方案1】:

HttpClientFactory 在这里工作。我们需要在Configservices方法中添加下面的代码是startup.cs

services.AddHttpClient();

并为 IHttpClientFactory _httpClientFactory 添加依赖项,它可以工作,现在需要 1573 毫秒来响应 API。

【讨论】:

以上是关于.Net 核心:Rest API 正在获取超时 504 状态代码的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot REST API - 请求超时?

尝试从asp.net web api调用获取响应时android studio中的超时异常

如何使用 asp.net Web API 2(使用 TPL/Reactive)缓冲和批处理 REST 获取查询?

Rest API - 部分更新

Web APi Vs MVC 和在 ASP.net 核心 Web APi 中提供静态文件

CORS:使用 ASP.NET 4.5.1 MVC 的 Rest API