【发布时间】:2021-03-24 17:22:31
【问题描述】:
我遇到的问题似乎与使用 HttpClient 异步调用特定 API 相关 - 奇怪的是它不会一直发生,可以通过刷新页面来解决(有时一次,有时多次)。
我认为这可能是本地问题,但在 Azure 上托管会产生相同的结果。
原始异常详情:
System.Net.Sockets.SocketException (11001):不知道这样的主机 在 System.Net.Http.ConnectHelper.ConnectAsync(字符串主机,Int32 端口,CancellationToken 取消令牌)
我已经检查过:
- API 没有任何限制
- 在浏览器中传递请求 url 会返回预期的 JSON 结果
- 刷新页面有时可以解决问题
这似乎是导致问题的方法:
public async Task<List<MoonPhase.Phasedata>> GetPhaseDataAsync(double lat, double lng, int year)
{
string requestUrl = "https://api.usno.navy.mil/moon/phase?year=" + year + "&coords=" + locationService.FormatCoordinates(lat, lng) + "&tz=0";
using (var client = new HttpClient())
{
var content = await client.GetStringAsync(requestUrl);
var moonPhaseObject = JsonConvert.DeserializeObject<MoonPhase.RootObject>(content, new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
return moonPhaseObject.PhaseData;
}
}
【问题讨论】:
-
首先,将 HttpClient 视为 IDisposable 是一种不好的做法。
-
@TimothyJannace 为什么会这样?
HttpClient实现IDisposable。 -
您是否检查过呈现的 URL 是否有效,以及运行代码的机器是否可以解析和导航到
api.usno.navy.mil? -
这篇文章可能有助于解释它。他在底部有一个很好的总结,解释了 HttpClient 的生命周期:medium.com/@nuno.caneco/…
标签: c# asp.net-core asp.net-core-mvc