北京网站排名方案,学校网站代码,公司有域名的怎么建设网站,番禺市桥做网站公司.Net的面向切面编程.Net的服务端应用AOP很常见#xff0c;在Asp.net MVC与Asp.net WebApi等新框架里到处都有AOP的影子#xff0c;我们可以把一个服务方法“切”为很多面#xff0c;日志面、验证面、请求方式处理、接口业务实现等多个面#xff0c;有一些面可以使用过滤器特… .Net的面向切面编程.Net的服务端应用AOP很常见在Asp.net MVC与Asp.net WebApi等新框架里到处都有AOP的影子我们可以把一个服务方法“切”为很多面日志面、验证面、请求方式处理、接口业务实现等多个面有一些面可以使用过滤器特性(FilterAttribute)进行编写然后很方便和打上特性即可对于一般的工程师只需要专注实现接口业务实现。在流行SOAP的年代很少需要一个强悍的Client而今天restful时代.net也出了一个HttpClient可以说是与Asp.net WebApi相配吧虽然HttpClient相对WebClient在http接口请求有了质的变化但相比服务端的webApiAOP的影子都不见了。 让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实现方法 这里我选择了CastleCastle可以动态创建接口的实现类并实例化可以对接口方法调用前进行拦截并设置返回结果。我们可以根据这个拦截功能收集每个面的配置组装为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 TaskApiResultstring GetAboutAsync(string type); [HttpGet(/webapi/user)] // GET webapi/user?userNameaanickNamebbBeginTimeccEndTimedd TaskApiResultUserInfo GetUserAsync(string userName, string nickName, TimeFilter timeFilter); [HttpPut(/webapi/user)] // PUT webapi/user TaskApiResultbool UpdateUserAsync([JsonContent] UserInfo loginInfo); [HttpDelete(/webapi/user)] // DELETE webapi/user?ididValue TaskApiResultbool DeleteUserAsync(string id); [HttpDelete(/webapi/user/{id})] // DELETE webapi/user/idValue TaskApiResultbool DeleteUser2Async(string id); }}Step2:获取接口实并调用namespace Demo{ class Program { static async void Test() { var myWebApi new WebApiClient.HttpApiClient().GetHttpApiMyWebApi(); await myWebApi.GetAboutAsync(typeValue); await myWebApi.UpdateUserAsync(new UserInfo { UserName abc, Password 123456 }); await myWebApi.DeleteUser2Async(id: id001); } static void Main(string[] args) { Test(); Console.ReadLine(); } }}WebApiClient更多的面我们可以给框架增加更多的自定义面比如日志记录、返回结果统一验证等等这些就不一一介绍但思想还是一样的。 WebApiClient开放这是一个开放的框架托管在 https://github.com/xljiulang/WebApiClient 已经支持.net core平台。 如果你喜欢点个星吧。相关文章自动类型安全的REST .NET标准库refitSwaggerAutoRest 生成web api客户端(.Net)原文地址: http://www.cnblogs.com/kewei/p/6646601.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com