C# ASP.NET Core - SocketException: 不知道这样的主机

Bea*_*eau 6 c# asp.net-core-mvc asp.net-core

我遇到的问题似乎与使用异步调用特定 API 相关HttpClient- 奇怪的是它不会一直发生,并且可以通过刷新页面(有时一次,有时多次)来解决。

我认为这可能是本地问题,但在 Azure 上托管会产生相同的结果。

原始异常详细信息:

System.Net.Sockets.SocketException (11001): System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancelationToken) 不知道这样的主机

我检查过:

  • 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

zmi*_*ike 10

我通过在 15 分钟内尝试多次访问(使用此 URI)来测试 API。一两分钟内似乎出现了 DNS 问题。

如果存在 DNS 故障等问题,该GetStringAsync方法会引发异常(来源)。您可以尝试捕获此异常,并在抛出此异常时实现重试机制。HttpRequestException