深入学习HttpClient(一)扩展额外的功能
HttpClient作为.net4.5新增的Http库除了对于async/await形式的异步支持外,还向我们展示了其强大的扩展能力。
【类库的设计】
让我们先看下Httpclient的设计图:
图中我们可以清晰的看出对于HttpClient库而言其请求的过程:
从Request发起,经过DelegatingHanlder处理后,进入InnerHandler,数据返回后再从Inner Handler 返回到Delegating Hanlder进行处理,最后返回结果。
从设计角度来讲,HttpClient库提供了强大的扩展性,使用者不需要任何继承即可完成对HttpClient的扩展(如果对设计模式熟悉,可以清楚的看出这里用到了装饰器模式)
先让我们来看一段实际的代码宏观的对HttpClient很方便的扩展有更具体的认识:
我们首先通过代码给Httpclient加一个DebugLog功能:
那么我们需要按下面的方式来定义:
上面代码的几点说明:
1、对于HttpClient这个类而言,其本身并不会进行实际的网络请求收发处理,我们应将其理解成一个容器、一个中继者,实际的网络请求核心在HttpClientHanlder中,也就是前面图中对应的Inner Handler。
2、我们自己定义了一个LoggingHandler,这个类对应Delegating Handler 是我们自定义的、装饰在Inner Handler外的Handler
3、DelegatingHandler重载了SendAsync,在其内部调用了InnerHandler的SendAsync方法,如此我们便可以在实际请求发出,以及返回后进行各种统一的处理,总结起来仍是上面图中画出的,逐层调用。
一个例子可能不足以让人理解透彻,我们可以展开思路,为httpClient定制出更多的功能,比如下面的例子:
为httpClient扩展出失败重试的逻辑:实际使用方式
在实际使用过程中我们可以定义一个方法来统一配置httpClient:
1、注意自定义的Handler的执行顺序,是从左往右依次调用
可以更深入的参考下面的文章:http://chimera.labs.oreilly.com/books/1234000001708/ch14.html
【总结】
HttpClient这一套类库的设计相比之前而言非常的精妙,可以作为典型的设计模式教材了,而在实际开发过程中也为每个开发人员提供了网络层架构的极大遍历,如果你要与.net4.5打交道,那么是时候更新你的工具箱了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库