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

如何在.NET Framework 4.6.1中用Autofac和Polly配置HttpClient

.NET Framework 4.6.1下Autofac+Polly配置强类型HttpClient方案

需求与问题

现有遗留应用通过HttpClient与Web API后端交互,需在Autofac依赖注入容器中配置多个HttpClient,要求包含:

  • 超时设置
  • Polly重试策略
  • 委托处理程序

预配置的HttpClient需注入到其他服务构造函数中,同时要实现封装完整逻辑的强类型客户端,且该客户端可通过构造函数接收参数,从应用配置中设置特定属性。

但多数示例和文档针对.NET Core框架,找不到.NET Framework 4.6.1下Autofac+Polly的适配配置示例,目前初步代码如下:

// Autofac依赖注入容器中的配置
builder.Register(c => c.Resolve<IHttpClientFactory>()
        // 疑问:如何在DI容器中应用Polly策略?
        // 疑问:如何将appsettings的值传递给StrongTypedHttpClient构造函数?
        // 疑问:如何传递委托处理程序?
        .CreateClient())
        .As<StrongTypedHttpClient>();

public class StrongTypedHttpClient
{
    private readonly HttpClient _httpClient;

    public StrongTypedHttpClient(HttpClient httpClient)
    {
        _httpClient = httpClient;
        // 疑问:如何将Polly策略应用到HttpClient实例?
        // 疑问:如何获取应用配置?
    }
    // HttpClient业务逻辑方法
}

// 使用预配置强类型HttpClient的消费者类
public class Consumer
{
    private readonly StrongTypedHttpClient _httpClient;

    public Consumer(StrongTypedHttpClient httpClient)
    {
        _httpClient = httpClient;
    }
}

请问该如何实现?

更新:已完成的配置方案

按照建议使用Microsoft.Extensions.Http中的HttpClientBuilder接口后,已成功实现需求,强类型HttpClient在Autofac容器中的配置代码如下:

var settings = GetRefreshTokenSettings();
builder.RegisterInstance(settings).AsSelf();

// 定义Polly重试策略:处理瞬时HTTP错误、超时拒绝异常,线性退避重试
var retryPolicy = HttpPolicyExtensions
                  .HandleTransientHttpError()
                  .Or<TimeoutRejectedException>()
                  .WaitAndRetryAsync(Backoff.LinearBackoff(TimeSpan.FromMilliseconds(300), retryCount: settings.TokenHttpClientRetryCount));

// 定义Polly超时策略
var timeoutPolicy = Policy.TimeoutAsync<HttpResponseMessage>(settings.TokenHttpClientTimeoutInSeconds);

// Autofac中注册配置好的强类型HttpClient
builder.Register(c => c.Resolve<IHttpClientBuilder>()
                       .AddTypedClient<StrongTypedHttpClient>()
                       .AddPolicyHandler(retryPolicy)
                       .AddPolicyHandler(timeoutPolicy));

内容的提问来源于stack exchange,提问作者Oblomingo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 14:48:15