You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需ServiceCollection与IoC,如何创建带Polly策略的HttpClient?

无IoC/ServiceCollection场景下构建带Polly策略的HttpClient

首先要明确:IHttpClientBuilder是和ServiceCollection/DI容器深度绑定的类型,它的设计初衷就是在依赖注入体系内配置HttpClient。所以无DI场景下,硬造IHttpClientBuilder既不现实也没必要——直接手动把Polly策略和HttpClient结合更简单。

方法一:完全无DI,手动组合Polly策略与HttpClient

跳过AddPolicyHandler扩展,直接用Polly原生的PolicyHttpMessageHandler来包装策略,再传入HttpClient:

using Polly;
using Polly.Extensions.Http;
using System.Net.Http;

// 1. 定义你需要的Polly策略(这里以重试为例)
var retryPolicy = HttpPolicyExtensions
    .HandleTransientHttpError() // 捕获常见的瞬时HTTP错误(5xx、408等)
    .WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));

// 2. 创建Polly消息处理器,指定内部处理器(必须设置,否则HttpClient无法发请求)
var policyHandler = new PolicyHttpMessageHandler(retryPolicy)
{
    InnerHandler = new HttpClientHandler()
};

// 3. 实例化带策略的HttpClient
var httpClient = new HttpClient(policyHandler);

// 调用示例
var response = await httpClient.GetAsync("https://api.example.com");
response.EnsureSuccessStatusCode();

这种方式完全脱离DI容器,直接通过PolicyHttpMessageHandler把Polly策略注入到HttpClient的请求管道中,是无IoC场景下的最优解。

方法二:临时使用ServiceCollection调用AddPolicyHandler(若一定要用该扩展)

如果你非要调用AddPolicyHandler扩展方法,只能临时创建一个轻量级的ServiceCollection容器,注册完后再提取HttpClient:

using Microsoft.Extensions.DependencyInjection;
using Polly;
using Polly.Extensions.Http;
using System.Net.Http;

// 1. 临时创建ServiceCollection并配置HttpClient和策略
var services = new ServiceCollection();
services.AddHttpClient("PollyClient")
    .AddPolicyHandler(HttpPolicyExtensions
        .HandleTransientHttpError()
        .WaitAndRetryAsync(3, i => TimeSpan.FromSeconds(i)));

// 2. 构建服务提供者并获取HttpClientFactory
var serviceProvider = services.BuildServiceProvider();
var httpClientFactory = serviceProvider.GetRequiredService<IHttpClientFactory>();
var httpClient = httpClientFactory.CreateClient("PollyClient");

// 3. 使用后记得释放容器资源(控制台等场景)
await serviceProvider.DisposeAsync();

注意:这种方式本质还是用到了DI容器,只是临时创建了一个,适合你一定要用AddPolicyHandler扩展的场景,但不如方法一直接。


内容的提问来源于stack exchange,提问作者Node.JS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:52:25