我在docker化的应用程序中有两个微服务。一个是Web Api项目,第二个是Web MVC应用程序。我想在MVC应用程序中调用Web API。
注意:我正在使用.Net Core 2.1
我以这种方式打电话:
using (var client = new HttpClient())
{
try
{
var res = await
client.GetStringAsync("http://localhost:44398/api/values");
return Ok(res);
}
catch (Exception ex)
{
throw ex;
}
}
但是它给出了这个错误:
An unhandled exception occurred while processing the request.
SocketException: No connection could be made because the target machine
actively refused it
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port,
CancellationToken cancellationToken)
HttpRequestException: No connection could be made because the target
machine actively refused it
WebMVCApp.Controllers.HomeController.Index() in HomeController.cs, line 27
当我从浏览器拨打电话时,它工作正常。即使我在没有docker的情况下使用相同的代码,然后从mvc应用程序调用网络api也能正常工作。 我还启用了CORS:
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseCors("CorsPolicy");
app.UseHttpsRedirection();
app.UseMvc();
}
请帮助我解决此问题。我花了很多时间解决此问题,但我不明白问题出在什么地方。
我还阅读了关于stackoverflow的问题的答案。
Call Microservice from another Microservice within Docker
但是我不明白如何才能将api名称用作此答案中说明的url。当我在网址中使用api名称时是这样的:
https://catalogapi:44398/api/values
它会产生此错误:
SocketException: No such host is known
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port,
CancellationToken cancellationToken)