0
  • 我有一个在我的机器上使用 localhost 运行的 asp.net web api (app1),https://localhost:44301/weatherforecast

  • 我在 azure app 服务上托管的其他 asp.net web api (app2),https://webapiapp120200626111110.azurewebsites.net/weatherforecast调用 app1 的 apihttps://localhost:44301/weatherforecast

    [HttpGet]
     public async Task<string> Get()
     {
         var result = string.Empty;
         using var client = new HttpClient();
         var defaultRequestHeaders = client.DefaultRequestHeaders;
    
         if (defaultRequestHeaders.Accept == null || defaultRequestHeaders.Accept.All(m => m.MediaType != "application/json"))
         {
             client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
         }
    
         var response = await client.GetAsync("https://localhost:44301/weatherforecast");
    
         if (response.IsSuccessStatusCode)
         {
             result = await response.Content.ReadAsStringAsync();
         }
    
         return result;
     }
    

如果我托管为 azure app 服务,我会收到500错误app2,如果我在本地运行它localhost,那么没有问题。

这是本地主机上的阻塞,我们怎么能做到这一点?

4

1 回答 1

3

“localhost”指的是当前机器,在大多数情况下将转换为 ip4 127.0.0.1。因此,如果您的应用服务“app2”正在调用“localhost”,那么它基本上是在调用自身,而不是您托管“app1”的机器。

如果要从 Azure 应用服务调用在本地计算机上运行的“app1”,则需要在计算机上向 Internet 公开“app1”。

您需要知道您的机器所在的公共 ip,确保您的路由器等可以将流量从公共 ip 路由到您机器的内部网络 ip(根据情况,您可能会遇到很多其他问题在防火墙、路由器、网络基础设施上,如果“app1”是否在 IIS Express 上运行,...)。

只需在 Azure 上将“app1”和“app2”都作为应用服务托管。

于 2020-06-26T06:38:28.700 回答