一个应用程序作为 azure 应用程序服务托管并尝试调用另一个应用程序 运行 localhost - 给出 500 错误
one app is hosted as azure app service and trying to call another app running with localhost - giving 500 error
我有一个 asp.net web api (app1),它是我机器上的 运行 本地主机,https://localhost:44301/weatherforecast
其他 asp.net web api (app2) 我通过 azure 应用程序服务托管,https://webapiapp120200626111110.azurewebsites.net/weatherforecast
调用 app1 的 api https://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;
}
如果我将 app2
托管为 azure 应用程序服务,我会收到 500
错误,如果我 运行 在本地通过 localhost
,则没有问题。
这是本地主机上的阻塞吗,我们该怎么做?
“localhost”指的是当前机器,在大多数情况下会转换为 ip4 127.0.0.1。因此,如果您的应用服务“app2”正在调用“localhost”,它基本上是在调用自身,而不是您托管“app1”的机器。
如果您想通过 Azure 应用服务在本地计算机上调用“app1”运行ning,则需要在您的计算机上将“app1”公开到 Internet。
你需要知道你机器后面的 public ip,确保你的路由器等可以将流量从 public ip 路由到你机器的内部网络 ip(可能有根据防火墙、路由器、网络基础设施,如果“app1”运行是否在 IIS Express 上运行,您将 运行 解决大量其他问题,...)。
只需将“app1”和“app2”作为应用服务托管在 Azure 上。
我有一个 asp.net web api (app1),它是我机器上的 运行 本地主机,
https://localhost:44301/weatherforecast
其他 asp.net web api (app2) 我通过 azure 应用程序服务托管,
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; }
如果我将 app2
托管为 azure 应用程序服务,我会收到 500
错误,如果我 运行 在本地通过 localhost
,则没有问题。
这是本地主机上的阻塞吗,我们该怎么做?
“localhost”指的是当前机器,在大多数情况下会转换为 ip4 127.0.0.1。因此,如果您的应用服务“app2”正在调用“localhost”,它基本上是在调用自身,而不是您托管“app1”的机器。
如果您想通过 Azure 应用服务在本地计算机上调用“app1”运行ning,则需要在您的计算机上将“app1”公开到 Internet。
你需要知道你机器后面的 public ip,确保你的路由器等可以将流量从 public ip 路由到你机器的内部网络 ip(可能有根据防火墙、路由器、网络基础设施,如果“app1”运行是否在 IIS Express 上运行,您将 运行 解决大量其他问题,...)。
只需将“app1”和“app2”作为应用服务托管在 Azure 上。