簡體   English   中英

Azure Functions v2 的 HttpClientFactory 的可用性

[英]Availability of HttpClientFactory for Azure Functions v2

我想知道 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://docs.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 函數已更新,並且有一個新的 FunctionStartup類可用於代替IWebJobsStartup

注意:您首先需要安裝Microsoft.Extensions.Http NuGet 包

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:

發布 v2.0.12265

首先,您可以為IWebJobsStartup提供一個實現,您將在其中定義要注入的服務。

添加對 NuGet 包Microsoft.Extensions.Http的引用並使用擴展方法AddHttpClient()以便 Azure Functions 將接收的HttpClient實例來自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 函數,並添加一個構造函數以啟用由內部 -I think- DefaultHttpClientFactory實例構建的HttpClient實例的注入:

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}");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM