我有一个发布到Azure网站的.Net Core 3.1服务器。作为这个服务器的一部分,它有一个API端点,我需要用另一个应用程序调用它。这个端点的控制器做了几件事,但至关重要的是,它使用HttpClient
调用另一个外部API端点。
我不认为任何代码都有问题,但作为参考,这就是从服务器到外部API的HTTP请求:
try
{
string endpoint = baseAdress + cpe;
string responseBody = await client.GetStringAsync(endpoint);
// ... It fails at the line above, the rest of this just parses the response body
}
catch (HttpRequestException e)
{
Console.WriteLine("nException Caught!");
Console.WriteLine("Message :{0} ", e.Message);
// "Response status code does not indicate success: 502 (Bad Gateway)."
}
当我在本地运行此服务器并将客户端应用程序设置为在localhost调用服务器端端点时,一切都会顺利运行。控制器运行,调用这个外部API,获取结果,然后进行一些解析并向我的客户端应用程序返回响应。
当我将服务器发布到Azure并让客户端将其API调用指向Azure时,没有问题。然而,服务器试图调用外部API导致502错误。
Azure是否阻止服务器调用外部终结点?或者我错过了一些需要更改的设置?我以前从未使用过Azure网站,所以这对我来说是一个全新的领域,如果我做出了一些愚蠢的假设/错误,我深表歉意。我在帖子中看到的关于这些问题的其他人都有超时问题,但当我在本地运行时,通常在30秒内完成,所以我不认为这是问题所在。
由于您在不同的域上调用API,请确保在web应用程序上启用CORS。
az resource update --name samsapp--resource-group myResourceGroup --namespace Microsoft.Web --resource-type config --parent sites/<app_name> --set properties.cors.allowedOrigins="['http://api.com']" --api-version 2015-06-01