c# - Azure Functions v2 的 HttpClientFactory 的可用性

标签 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
}

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:

Release v2.0.12265

首先,您可以为 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/

相关文章:

azure - 如何在没有门户的情况下获取函数URL

javascript - 通过azure存储上传图像

c# - 将泛型类型与 asp.net 用户控件一起使用

c# - 正则表达式允许数字、破折号、逗号

azure - worker 角色在 csrun.exe 中失败,但直接从 VS 运行时工作正常(VS 中的 F5)

azure - 自动刷新 token 并添加新的用户安全组 Azure AD

entity-framework - 无法在 Azure 网站中加载 Entity Framework 程序集 - 该模块应包含程序集 list

c# - 检查哈希表集合中是否存在键/值对

C# System.InvalidOperationException : The current TransactionScope is already complete

azure - 从服务总线主题触发 Azure Function,而不消耗代理连接