我的项目遇到问题,我已经建立了一个api项目并将其放入docker容器中。
使用浏览器中的本地主机可以很好地通过Web到达容器,但是当尝试通过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
答案 0 :(得分:0)
端口和连接之类的声音很好。我认为这不是网络问题,而是环境变量的问题。
尝试: -ASPNETCORE_URLS = https://localhost;http://localhost
答案 1 :(得分:0)
我认为默认情况下不允许外部连接。您可以尝试添加网址预留,如this question中所述。也许像这样:
netsh http add urlacl url=https://+:44310/ user=everyone
(看起来您正在将容器端口443映射到计算机上的44310。??)