C# ASP.NET Core - SocketException : No such host is known

标签 c# asp.net-core asp.net-core-mvc

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

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

原始异常详细信息:

System.Net.Sockets.SocketException (11001): No such host is known at System.Net.Http.ConnectHelper.ConnectAsync(String host, Int32 port, CancellationToken cancellationToken)

我已经检查过:

  • API 没有任何限制
  • 在浏览器中传递请求网址会返回预期的 JSON 结果
  • 刷新页面有时可以解决问题

错误的开始: Error top

其余: Error bottom

这似乎是导致问题的方法:

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;
    }
}

最佳答案

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

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

关于C# ASP.NET Core - SocketException : No such host is known,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56793682/

相关文章:

C#:如何查找和创建满足多种类型约束的实例

c# - 如何在类中实现克隆和复制方法?

c# - 在 ASP.NET Core 中发布复杂类型

asp.net-mvc - 如何在ASP.NET MVC6 beta5项目中添加 Controller ?

c# - WPF DataGrid - 分级色标上的颜色单元格

c# - ASP.NET Web API 中不允许使用 HTTP PUT

iis - 在 IIS 中托管 asp.net 核心应用程序以从网络内的其他 PC 访问

c# - Spin 在 Portable Class Library 中等待多次自旋

c# - 先用点表示小数,再用逗号表示

c# - 在 mvc 中使用 IViewLocationExpander