.NET 6中为所有HttpClient添加DelegatingHandler:Primary与Additional Handler的区别
Primary Handler 与 Additional Handler 的核心差异
本质定位不同
- Primary Handler(主处理器):是HTTP请求链路的最终执行者,负责把请求实际发送到目标服务器。HttpClientFactory默认用
HttpClientHandler作为主处理器,它是链路的最后一环。如果直接替换它,等于换掉了底层的请求发送逻辑——要是你的MyNiceHandler不是继承自HttpClientHandler(而是普通的DelegatingHandler),这么做会导致请求无法正常发送,因为它没法独立完成请求发送的工作。 - Additional Handlers(附加处理器):属于请求链路里的中间件,都是
DelegatingHandler类型。它们会按添加顺序组成一个管道,请求先依次经过这些附加处理器,最后才传递给Primary Handler执行发送。这类处理器的作用是在请求发送前/响应返回后做一些通用处理,比如修改请求头、调整URL、记录日志、重试等,不需要承担实际发送请求的职责。
结合你的场景选择
你的需求是设置URL中的标准元素,这种情况优先用Additional Handlers:
- 你只需要在请求发送前修改URL,完全不需要替换底层的请求发送逻辑,用附加处理器不会破坏默认的请求执行流程。
- 要是用第二个示例直接替换Primary Handler,若
MyNiceHandler是DelegatingHandler类型,还得手动给它设置InnerHandler才能让请求继续传递,反而多了不必要的配置。
两个代码示例的实际效果
- 第一个示例:把
MyNiceHandler加入附加处理器列表,请求会先经过它修改URL,再交给默认的HttpClientHandler完成实际发送,逻辑完全通顺。 - 第二个示例:直接替换主处理器,如果
MyNiceHandler不是HttpClientHandler的子类,请求会在这个处理器处中断,根本发不出去;就算是子类,也等于放弃了默认主处理器的所有内置逻辑(比如连接池管理),完全没必要。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

