我的停靠应用程序中有两个微服务。一个是Web Api项目,另一个是Web MVC应用程序。我想在mvc应用程序中调用web api。
注意:我使用的是.Net Core2.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应用程序调用WebAPI,也可以正常工作。
我还启用了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,正如这个答案中所解释的那样。当我在url中使用api名称时,如下所示:
https://catalogapi:44398/api/values
它会产生以下错误:
SocketException: No such host is known
System.Net.Http.ConnectHelper.ConnectAsync(string host, int port,
CancellationToken cancellationToken)