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
IHttpClientFactory实际上,由于Azure Function v2运行时已移至ASP.Net Core 2.2 ,因此确实可以使用最新的Azure Function v2运行时:
首先,您可以提供一个实现,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)
| 归档时间: |
|
| 查看次数: |
2148 次 |
| 最近记录: |