c# - 无法连接到 docker 容器中托管的 restful api
问题描述
我的项目面临一个问题,我已经构建了一个 api 项目并将其放入 docker 容器中。
我可以使用浏览器中的本地主机通过网络访问容器,但是当尝试通过restsharp的代码使用它时,httpclient我得到连接被拒绝。
我尝试了本地主机,分配了直接 172 地址,甚至根据我读过的其他方向公开了一个指向 127.0.0.1 的端口。
我迷失了下一步,因为我似乎无法让它以任何方式工作
这是我设置的简单代码:
api调用
[Route("Internal/Email")]
public class EmailController : ControllerBase
{
[Route("Get")]
[HttpGet]
public ActionResult<string> Get()
{
return "email got";
}
}
消费者来电:
public class TestController : Controller
{
private ServiceUrlConstants _serviceUrlConstants = new ServiceUrlConstants();
private string _serviceUrl;
public IActionResult GetEmail()
{
try
{
_serviceUrl = _serviceUrlConstants.InternalServiceUrl;
var httpClient = new HttpClient();
var response = httpClient.GetAsync(_serviceUrl + "Internal/Email/Get");
var content = response.Result.Content.ReadAsStringAsync();
httpClient.Dispose();
//client = new RestClient(_serviceUrl + "Internal/Email/Get");
//var response = client.Execute(request);
//var content = response.Content;
return RedirectToAction("Index");
}
catch (Exception ex)
{
return RedirectToAction("Index");
}
}
}
Docker 配置(由 Visual Studio 自动构建,第三端口暴露除外)
internalapiservice:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+:443;http://+:80
- ASPNETCORE_HTTPS_PORT=44310
ports:
- "17399:80"
- "44310:443"
- "127.0.0.1:45310:45310"
volumes:
- ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
- ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
解决方案
我认为默认情况下不允许外部连接。您可以尝试添加此问题中详述的 URL 保留。也许是这样的:
netsh http add urlacl url=https://+:44310/ user=everyone
(看起来您正在将您机器上的容器端口 443 映射到 44310 ..?)
推荐阅读
- html - 如何将“uk-toggle”放入rails link_to?
- r - 下载闪亮报告时出现故障-服务器问题错误
- node.js - 如何使用multer上传然后将路径存储在mongodb中
- android - 是否可以使用设备上现有文件的递增 inode 创建备用目录?
- intellij-idea - IntelliJ 无法识别 Angular 7 项目组件中的 html 标签
- karate - 空手道:.intuit.karate.http.DummyHttpClient - 尝试构建 url:http://localhost:8089/,但使用虚拟 http 客户端
- python - 在 Python 中对列表求和 - 在一个元组和另一个列表中
- javascript - 当互联网连接消失时回滚命中端点
- autocomplete - 如何使自动完成替换整行而不是当前关键字?
- java - 具有关联的资源的最佳 rest api 命名约定