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

.NET注册HTTP客户端:添加处理程序的顺序是否重要?顺序错误会有问题吗?

.NET HTTP客户端消息处理程序的添加顺序问题
  • 添加处理程序的顺序非常重要。HTTP客户端的消息处理程序是按管道模式工作的:发送请求时,会从你最后添加的处理程序开始,往前依次执行;收到响应时,则反过来从第一个添加的处理程序开始,往后依次执行。

  • 把AddPolicyHandlerFromRegistry放在AddOAuthHttpMessageHandler之前确实会引发问题,原因如下:

    • AddOAuthHttpMessageHandler的作用是给请求添加OAuth令牌,属于请求发送前的预处理逻辑;而AddPolicyHandlerFromRegistry一般用来配置重试、熔断、超时这类策略。
    • 如果策略处理程序在前,那么重试策略会把令牌获取的逻辑也包含进去。要是身份服务临时限流或者令牌获取失败,重试机制会重复触发令牌请求,既浪费资源,还可能触发身份服务的限流阈值。

正确的做法是把OAuth处理程序放在策略处理程序前面,这样策略只会作用于实际的业务请求,不会重复执行令牌获取逻辑,调整后的代码如下:

return services
            .Configure<Options>(configuration.GetSection(nameof(Options)))
            .AddHttpClient<IService, Service>()
                .AddOAuthHttpMessageHandler(() => configuration.GetBinded<Options>().RealmScope)
                .AddPolicyHandlerFromRegistry("Field")
                .AddHttpMessageHandler<TrackingHandler>()
                .Services;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:39:25