千家信息网

WebApi client 的面向切面编程

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,.Net的面向切面编程.Net的服务端应用AOP很常见,在Asp.net MVC与Asp.net WebApi等新框架里到处都有AOP的影子,我们可以把一个服务方法"切"为很多面,日志面、验证面、请求
千家信息网最后更新 2026年11月01日WebApi client 的面向切面编程

.Net的面向切面编程

.Net的服务端应用AOP很常见,在Asp.net MVC与Asp.net WebApi等新框架里到处都有AOP的影子,我们可以把一个服务方法"切"为很多面,日志面、验证面、请求方式处理、接口业务实现等多个面,有一些面可以使用过滤器特性(FilterAttribute)进行编写,然后很方便和打上特性即可,对于一般的工程师,只需要专注实现接口业务实现。

在流行SOAP的年代,很少需要一个强悍的Client,而今天restful时代,.net也出了一个HttpClient,可以说是与Asp.net WebApi相配吧,虽然HttpClient相对WebClient在http接口请求有了质的变化,但相比服务端的webApi,AOP的影子都不见了。

让HttpClient支持AOP

所谓让HttpClient支持AOP,是指在对HttpClient进行组合封装,基于HttpClient再打造一款客户端框架,将AOP的理念引入到新客户端框架来,我们可以简单分析一下HttpClient请求一个接口要做的基本事情,同时把这些事情"切"为多个面,Http请求大致如下:

{Method} {Path}?query1={value1}&query2={value2}{Header1}{Header2}{body}

我可以切出几个面:

  1. method与path处理

  2. query参数处理

  3. 请求body内容处理

  4. 发送请求

  5. 回复结果处理

我们所做的框架,需要把1、2、3、5封装为面,同时调用HttpClient来完成第4个动作。

AOP基础框架的选择

可以参考这个博客:NET AOP(一)七种AOP实现方法

这里我选择了Castle,Castle可以动态创建接口的实现类并实例化,可以对接口方法调用前进行拦截,并设置返回结果。

我们可以根据这个拦截功能,收集每个面的配置,组装为http请求消息,然后调用HttpClient为完成发送请求,再让第5个面来进行回复结果处理。基于Castle与HttpClient,我们就可以封装出支持AOP的HttpClient新框架,这里命名为WebApiClient吧。

WebApiClient设计

现在,我们的目标是,让调用WebApi与编写WebApi一样,声明接口、参数、返回值,打上请求方法与路径(面)特性、返回结果处理(面)特性、请求内容(面)特性。然后框架帮我们实现并取得实例,然后就可以调用这些接口了。

Step1:声明接口

namespace Demo{    [JsonReturn]    [HttpHost("http://www.mywebapi.com")]    public interface MyWebApi    {        [HttpGet("/webapi/{type}/about")] // GET webapi/typeValue/about        Task> GetAboutAsync(string type);        [HttpGet("/webapi/user")]  // GET webapi/user?userName=aa&nickName=bb&&BeginTime=cc&EndTime=dd        Task> GetUserAsync(string userName, string nickName, TimeFilter timeFilter);        [HttpPut("/webapi/user")] // PUT webapi/user        Task> UpdateUserAsync([JsonContent] UserInfo loginInfo);        [HttpDelete("/webapi/user")] // DELETE  webapi/user?id=idValue        Task> DeleteUserAsync(string id);        [HttpDelete("/webapi/user/{id}")] // DELETE  webapi/user/idValue        Task> DeleteUser2Async(string id);    }}

Step2:获取接口实并调用

   myWebApi =  WebApiClient.HttpApiClient().GetHttpApi myWebApi.GetAboutAsync( myWebApi.UpdateUserAsync( UserInfo { UserName = , Password =  myWebApi.DeleteUser2Async(id:   Main(

WebApiClient更多的面

我们可以给框架增加更多的自定义面,比如日志记录、返回结果统一验证等等,这些就不一一介绍,但思想还是一样的。


接口 框架 处理 特性 结果 方法 封装 支持 服务 业务 事情 内容 参数 同时 多个 实例 客户 客户端 影子 日志 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司排名 今日互联网科技 互联网金融 科技 礼当家互联网科技 无线互联网科技 火传媒上海互联网科技 深圳市运趣互联网科技有限公司 天速互联网络科技有限公司 创业天下互联网科技有限公司 栖莱科技互联网股份有限公司 互联网与医疗科技 健康食品互联网创新科技园项目 如何创新互联网科技 工业互联网展湾科技股份有限公司 科技互联网的核心竞争力 广州千川互联网科技有限公司 神州科技互联网有限公司 新氧科技和美国互联网有关系吗 盐城市攀科互联网科技有限公司 互联网领先科技成果宣传视频 为想互联网科技怎么样 朗新科技与工业互联网 平安科技 互联网 广州互联网络科技有限公司 亿账通互联网科技 重庆威客帮互联网科技 宁夏众和广鑫互联网科技有限公司 畅思互联网科技 工业互联网展湾科技股份有限公司 南通创西澳互联网科技有限公司
0