Azure Functions HttpClient 请求中出现“找不到此主机”的错误。
Azure Functions HttpClient 请求中出现“找不到此主机”的错误。
我试图检查一个API是否在运行,但是当我将代码发布到Azure时,HttpClient无法获取任何东西,因为当它尝试 .SendAsync();时,我从Azure得到的错误消息是\"No Such Host is Known\",但是在本地环境中,这段代码没有改变可以正常工作。
根据这个,你有什么想法,可能会导致HttpClient Get失败?
public class ConnectionTester { [FunctionName("ConnectionTester")] public static async Task Run([TimerTrigger("* */30 * * * *")] TimerInfo connectionTimer, ILogger log) { log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", strAuth); HttpRequestMessage newRequest = new HttpRequestMessage(HttpMethod.Get, strLink); var response = await client.SendAsync(newRequest); if (response.IsSuccessStatusCode) { log.LogInformation("Success"); } else { log.LogError("Error"); } } }
admin 更改状态以发布 2023年5月22日
我已经遵循了问题中给出的相同代码,并在下面重现:
堆栈:Azure Functions (.NET 6) - 定时器触发器
Function1.cs
using System; using System.Net.Http; using System.Threading.Tasks; using Microsoft.Azure.WebJobs; using Microsoft.Azure.WebJobs.Host; using Microsoft.Extensions.Logging; namespace KrishFunctionApp1205 { public class Function1 { [FunctionName("Function1")] public async Task RunAsync([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log) { log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}"); var strLink = "https://stackoverflow.com/"; var strAuth = "Key05"; var client = new HttpClient(); client.DefaultRequestHeaders.Add("Authorization", strAuth); HttpRequestMessage newRequest = new HttpRequestMessage(HttpMethod.Get, strLink); var response = await client.SendAsync(newRequest); if (response.IsSuccessStatusCode) log.LogInformation("Okidoki"); else log.LogError($"{response.StatusCode} {response.ReasonPhrase}: "); } } }
local.settings.json
:
{ "IsEncrypted": false, "Values": { "AzureWebJobsStorage": "UseDevelopmentStorage=true", "FUNCTIONS_WORKER_RUNTIME": "dotnet" } }
host.json:
{ "version": "2.0", "logging": { "applicationInsights": { "samplingSettings": { "isEnabled": true, "excludedTypes": "Request" } } } }
.csproj:
net6.0 v4 PreserveNewest PreserveNewest Never
在本地运行时的结果:
在 Azure 上运行时的结果:
说明:解决以下错误的几个步骤:
请求时出现“无法识别此主机”错误 HttpClient
-
可能是 DNS 问题,请检查 URI 是否有效。
-
您尝试发送到 URI 的请求被公司防火墙或系统防火墙阻止。
-
更改 Azure 函数项目的端口号并运行该函数。(参见此处以了解如何更改 Azure Functions 中的端口号)
-
如果在 Visual Studio 中有可用更新,则升级/更新 .NET 项目 SDK。
-
检查连接字符串是否指向正确的值。
要在本地运行并使用本地存储仿真器,请执行以下操作:"AzureWebJobsStorage": "UseDevelopmentStorage=true"
如果要使用 Azure 存储帐户并在本地运行函数,请执行以下操作:
"AzureWebJobsStorage": "
"
您可以从 Azure 门户 > 存储帐户 > 访问密钥 > 连接字符串中获取此连接字符串。