.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 状态代码的主要内容,如果未能解决你的问题,请参考以下文章
尝试从asp.net web api调用获取响应时android studio中的超时异常
如何使用 asp.net Web API 2(使用 TPL/Reactive)缓冲和批处理 REST 获取查询?