我想知道 HttpClientFactory 或类似内容是否可用于 Azure Functions v2。
以下是推荐的内容,但未显示 HttpClientFactory 或类似内容。
// Create a single, static HttpClient
private static HttpClient httpClient = new HttpClient();
public static async Task Run(string input)
{
var response = await httpClient.GetAsync("https://example.com");
// Rest of function
}
https://learn.microsoft.com/en-gb/azure/azure-functions/manage-connections
下面是一个很好的链接,但我不确定它是否可以在生产中使用,或者是否有官方功能可用。
https://www.tpeczek.com/2018/12/alternative-approach-to-httpclient-in.html
更新:
需要解决的问题
1 提供托管 HttpClient 池而不是单个 HttpClient,如 ASP.NET CORE 2.2 中的 HttpClientFactory
最佳答案
更新
由于原始答案已发布,Azure Functions 已更新,并且有 new FunctionStartup用于代替 IWebJobsStartup
的类:
注意:您首先需要安装Microsoft.Extensions.Http NuGet package
using MyNamespace.Functions;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(Startup))]
namespace MyNamespace.Functions
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddHttpClient();
}
}
}
原始答案
使用最新的 Azure Function v2 运行时,IHttpClientFactory
确实可供您使用,因为 Azure Function v2 运行时已移至 ASP.Net Core 2.2:
首先,您可以为 IWebJobsStartup
提供一个实现,您将在其中定义要注入(inject)的服务。
添加对 NuGet 包 Microsoft.Extensions.Http
的引用并使用扩展方法 AddHttpClient()
,以便您的 HttpClient
实例Azure Functions 将接收来自 IHttpClientFactory
的信息。
using MyNamespace.Functions;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.DependencyInjection;
[assembly: WebJobsStartup(typeof(Startup))]
namespace MyNamespace.Functions
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
builder.Services.AddHttpClient();
}
}
}
然后,您可以通过删除 static
关键字来更新 Azure 函数,并添加构造函数以启用内部构建的 HttpClient
实例的注入(inject) - 我认为 - DefaultHttpClientFactory
实例:
public sealed class MyFunction()
{
private readonly HttpClient _httpClient;
public MyFunction(HttpClient httpClient)
{
_httpClient = httpClient;
}
public void Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "v1/resource/{resourceId}")] HttpRequest httpRequest, string resourceId)
{
return OkObjectResult($"Found resource {resourceId}");
}
}
关于c# - Azure Functions v2 的 HttpClientFactory 的可用性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55021574/