net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 2
前言
前一篇讲到了中间层的使用,可能不是那么AOP,今天主要来说下一个轻量级的AOP第三方类库AspectoCore。
简单介绍下这个类库,AspectCore Project 是适用于 net core 平台的轻量级 Aop(Aspect-oriented programming) 解决方案,它更好的遵循 net core 的模块化开发理念,使用AspectCore可以更容易构建低耦合、易扩展的Web应用程序。
引入
首先,我们在Util层直接引入相关的类库。
然后我们还是先在Startup注册下,将ConfigureServices方法从void更改为IServiceProvider,目的就是,这个管道给别人了,不再由默认的来了。
public IServiceProvider ConfigureServices(IServiceCollection services)
{
//...之前的
services.AddAspectCoreContainer();
return services.BuildAspectInjectorProvider();
}
自定义属性
写完之后,我们就可以来试试这个玩意儿怎么玩了,不多说,Util来个文件夹Attributes,然后新建一个类AprilLogAttribute,继承AbstractInterceptorAttribute。
public class AprilLogAttribute : AbstractInterceptorAttribute
{
public async override Task Invoke(AspectContext context, AspectDelegate next)
{
LogUtil.Debug("AprilLogAttribute begin");
await next(context);
LogUtil.Debug("AprilLogAttribute end");
}
}
没啥具体的使用注解,就是加个前后注释的作用。然后我们在之前的Student这个接口中加上一个测试方法。
public interface IStudentService : IBaseService<StudentEntity>
{
[AprilLog]
void Test();
}
StudentService我们来实现这个方法。
public class StudentService : BaseService<StudentEntity>, IStudentService
{
public void Test()
{
LogUtil.Debug("StudentService Test");
}
}
测试
全部搞定之后,我们继续Values开刀,注释掉之前的代码之后,只留一个Test方法。
[HttpGet]
public ActionResult<IEnumerable<string>> Get()
{
_service.Test();
return new string[] { "value1", "value2" };
}
别忘了运行前在application.json里面加上接口白名单。
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"CommonSettings": {
"FilePath": "/uploads/files/"
},
"DefaultSqlConnectionString": {
"MySql": "server=127.0.0.1;userid=root;password=root;database=test;"
},
"AllowUrl": "/api/Values" //这个如果没有那一直是返回未登录
}
运行没问题,我们来看下日志记录。
另外也补充下这个记录的问题,如果需要监视接口调用的情况,我们可以加上断点看下这个context,这个对象里面本身已经包含了我们调用了哪个接口的哪个方法等等信息,这里只举个简单的例子,我们可以知道我们调用的接口及方法,包括实现及方法,然后可以记录下是谁访问,哪个接口,执行时间等等。
小结
写到这里,net core webapi的基础工程基本上已经完工了,通过这些记录我本身又对之前的工程进行了小量的改动,每次的一版写完都有一个新的感受,可能当时写一版的时候没有想太多,一遍一遍的过完之后发现有些地方可以优化,并且优化的效果也是挺明显,后续如果有新的功能实现或者业务需要的时候,也会同步更新的这个示例工程。
net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 2的更多相关文章
- net core Webapi基础工程搭建(六)——数据库操作_Part 2
目录 前言 开始 使用 小结 前言 昨天是写着写着发现,时间不早了,已经养成了晚上下班抽时间看看能写点儿啥的习惯(貌似),今天实在是不想让昨天没做完的事情影响,所以又坐下,沉下心(周末了),开始把数据 ...
- net core Webapi基础工程搭建(六)——数据库操作_Part 1
目录 前言 SqlSugar Service层 BaseService(基类) 小结 前言 后端开发最常打交道的就是数据库了(静态网站靠边),上一篇net core Webapi基础工程搭建(五)-- ...
- net core Webapi基础工程搭建(五)——缓存机制
目录 前言 Cache Session Cookie 小结 补充 前言 作为WebApi接口工程,性能效率是必不可少的,每次的访问请求,数据库读取,业务逻辑处理都或多或少耗费时间,偶尔再来个各种花式f ...
- net core Webapi基础工程搭建(二)——创建工程
目录 前言 创建工程 工程文件概述(个人理解) 运行 小结 前言 前面介绍了开发工具及net core版本,后端工程的框架结构开发工具及环境,因为是基础工程,所以没考虑太复杂的框架,如果有架构师请勿喷 ...
- net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 1
目录 前言 拦截器 异常拦截器 测试结果 身份验证拦截器 测试 小结 补充 2019-07-31 前言 一天天不知道怎么过的,但确实挺忙,事赶事不带停那种,让我感觉跟在流水线干活一样,忙活的事差不多了 ...
- net core Webapi基础工程搭建(一)——开发工具及环境
目录 开发工具 版本 后端框架 开发工具 Visual Studio 2019,既然要折腾那就体验最新版的开发工具有什么特殊的地方,之前个人开发使用的是2017. 下载地址:https://visua ...
- net core Webapi基础工程搭建(四)——日志功能log4net
目录 前言 log4net 依然是,NuGet引用第三方类库 整合LogUtil 小结 前言 一个完整的项目工程离不开日志文件的记录,而记录文件的方法也有很多,可以自己通过Stream去实现文件的读写 ...
- net core Webapi基础工程搭建(三)——在线接口文档Swagger
目录 前言 Swagger NuGet引用第三方类库 别急,还有 没错,注释 小结 前言 前后分离的好处,就是后端埋头做业务逻辑功能,不需要过多考虑用户体验,只专注于数据.性能开发,对于前端需要的数据 ...
- 第十九节:Asp.Net Core WebApi基础总结和请求方式
一. 基础总结 1.Restful服务改造 Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方 ...
随机推荐
- MyBatis从入门到精通(1):MyBatis入门
作为一个自学Java的自动化专业211大学本科生,在学习和实践过程中"趟了不少雷",所以有志于建立一个适合同样有热情学习Java技术的参考"排雷手册". 最近在 ...
- select语句中不应该数据库关键字(如:precision)
解决方案: 在关键字左右家特殊小点,在esc键的下面.(不是单引号) 如:`precision` 也可以在字段前加上表名.
- UVA1152- 枚举 /二分查找
The SUM problem can be formulated as follows: given four lists A,B,C,D of integer values, compute ho ...
- zabbix3.4汉化
1.管理员用户登入zabbix页面,更改语言为Chinese(zh_CN),点击Update 2.解决zabbix页面中文乱码 2.1在windows的C:\Windows\Fonts找到字体文件si ...
- Java IO 为什么我们需要缓冲区
在执行IO操作我们通常会设置一个字节数组作为缓冲区用来写/读数据,一般情况下一个合理大小的缓冲区是有利于提升性能的,但是有一个问题一直困扰着我,为什么缓冲区可以提升IO操作的性能? 经查阅资料之后,总 ...
- Office2010安装问题锦集
问题一,每次打开office 2010,都会出现重新配置的对话框. 解决姿势: 大部分搜索到的解决方法大概有2种, 一个是修改注册表,在注册表中这个这个位置增加一个名为NoRereg的32位World ...
- c++容器简单总结
数据结构 描述 实现头文件 向量(vector) 连续存储的元素 <vector> 列表(list) 由节点组成的双向链表,每个结点包含着一个元素 <list> 双队列(deq ...
- 图解Redis之数据结构篇——整数集合
前言 整数集合(intset)并不是一个基础的数据结构,而是Redis自己设计的一种存储结构,是集合键的底层实现之一,当一个集合只包含整数值元素,并且这个集合的元素数量不多时, Redis i ...
- VIM常用命令速查(转)
- ubuntu kylin的桌面崩溃问题
前几天安了ubuntu kylin,主题还是挺好看的,汉化也很好,就是各种报桌面错误,忍了,结果今天直接进不去桌面了 开机,输入密码,登录,然后桌面死活不显示,还弹出了错误提示我系统有问题,建议重启 ...