HttpClientFactory for Azure Functions v2的可用性

Pin*_*ong 5 c# azure azure-functions

我想知道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
}
Run Code Online (Sandbox Code Playgroud)

https://docs.microsoft.com/zh-CN/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

Kzr*_*tof 9

IHttpClientFactory实际上,由于Azure Function v2运行时已移至ASP.Net Core 2.2 ,因此确实可以使用最新的Azure Function v2运行时:

版本v2.0.12265

首先,您可以提供一个实现,IWebJobsStartup在其中您将定义要注入的服务。

添加对NuGet包的引用,Microsoft.Extensions.Http并使用扩展方法,AddHttpClient()以便HttpClient您的Azure Functions将收到的实例来自IHttpClientFactory

[assembly: WebJobsStartup(typeof(Startup))]

public sealed class Startup : IWebJobsStartup
{
    public void Configure(IWebJobsBuilder webJobsBuilder)
    {
        webJobsBuilder.Services.AddHttpClient();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过删除static关键字来更新Azure函数,并添加构造函数以启用HttpClient内部-I think- DefaultHttpClientFactory实例的build 实例的注入:

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}");
    }
}
Run Code Online (Sandbox Code Playgroud)

更新资料

自发布原始答案以来,Azure函数已更新,并且可以使用新的FunctionStartup类代替IWebJobsStartup

[assembly: FunctionsStartup(typeof(Startup))]

public sealed class Startup : FunctionsStartup
{
    public void Configure(IFunctionsHostBuilder builder)
    {
        builder.Services.AddHttpClient();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 对于像我这样的n00b,我想我还要添加您还需要安装Nuget包Microsoft.Extensions.Http,否则您将收到错误_IServiceCollection不包含AddHttpClient_的定义 (4认同)