WebApiclient的面向切面编程-创新互联
.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}
我可以切出几个面:
method与path处理
query参数处理
请求body内容处理
发送请求
回复结果处理
我们所做的框架,需要把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().GetHttpApimyWebApi.GetAboutAsync( myWebApi.UpdateUserAsync( UserInfo { UserName = , Password = myWebApi.DeleteUser2Async(id: Main(
WebApiClient更多的面
我们可以给框架增加更多的自定义面,比如日志记录、返回结果统一验证等等,这些就不一一介绍,但思想还是一样的。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章标题:WebApiclient的面向切面编程-创新互联
浏览地址:http://pwwzsj.com/article/dsoios.html