我的Web应用程序正在docker上运行,并尝试调用IIS上托管的外部api,但我无法访问外部api。抛出以下错误:但是当我的Web应用程序在本地iis上运行时,便能够连接api并获得响应。请帮助我。
InnerException {System.Net.Http.HttpRequestException:未知此类主机---> System.Net.Sockets.SocketException:在System.Net.Http.ConnectHelper.ConnectAsync中未知此类主机(字符串主机,Int32端口,在此处输入图像描述CancellationToken cancelToken)-内部异常堆栈跟踪的结尾--在System.Net.Http.ConnectHelper.ConnectAsync(String host,Int32端口,CancellationToken cancelToken)在System.Threading.Tasks.ValueTask1.get_Result ()在System.Net.Http.HttpConnectionPool.WaitForCreatedConnectionAsync(Value。 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMe)上的Tasks.ValueTask1.get_Result()在System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage请求,布尔值doRequestAuth,CancellationToken cancellingToken) System.Net.Http.HttpClient.FinishSendAsyncUnbuffered(Task1 sendTask,HttpRequestMessage request,CancellationTokenSource cts,Boolean disposeCts)在System.Net.Http.HttpClient.GetStringAsyncCore(Task1 getTask) Net.Http.HttpRequestException}
答案 0 :(得分:0)
我认为问题是Docker DNS服务器。您可以尝试使用真实的DNS服务器,例如8.8.8.8
如果您在Windows上使用Docker,则可以尝试更新DNS设置8.8.8.8
如果您使用的是Ubuntu,则可以尝试以下设置:
# /etc/docker/daemon.json
{
"dns": ["8.8.8.8"]
}
答案 1 :(得分:0)
对于macO和Windows,您可以尝试host.docker.internal。
将localhost
替换为host.docker.internal
。
public async Task<IActionResult> About()
{
//ViewData["Message"] = "Your application description page.";
HttpClient client = new HttpClient();
//var result = await client.GetStringAsync(@"http://localhost/IISWindows/home/test");
var result = await client.GetStringAsync(@"http://host.docker.internal/IISWindows/home/test");
ViewData["Message"] = result;
return View();
}
如果您在Linux中运行docker,则可以尝试构建新容器将请求重定向到主机,有关更多信息,请参见docker-host。