前言

前一篇讲到了中间层的使用,可能不是那么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的更多相关文章

  1. net core Webapi基础工程搭建(六)——数据库操作_Part 2

    目录 前言 开始 使用 小结 前言 昨天是写着写着发现,时间不早了,已经养成了晚上下班抽时间看看能写点儿啥的习惯(貌似),今天实在是不想让昨天没做完的事情影响,所以又坐下,沉下心(周末了),开始把数据 ...

  2. net core Webapi基础工程搭建(六)——数据库操作_Part 1

    目录 前言 SqlSugar Service层 BaseService(基类) 小结 前言 后端开发最常打交道的就是数据库了(静态网站靠边),上一篇net core Webapi基础工程搭建(五)-- ...

  3. net core Webapi基础工程搭建(五)——缓存机制

    目录 前言 Cache Session Cookie 小结 补充 前言 作为WebApi接口工程,性能效率是必不可少的,每次的访问请求,数据库读取,业务逻辑处理都或多或少耗费时间,偶尔再来个各种花式f ...

  4. net core Webapi基础工程搭建(二)——创建工程

    目录 前言 创建工程 工程文件概述(个人理解) 运行 小结 前言 前面介绍了开发工具及net core版本,后端工程的框架结构开发工具及环境,因为是基础工程,所以没考虑太复杂的框架,如果有架构师请勿喷 ...

  5. net core Webapi基础工程搭建(七)——小试AOP及常规测试_Part 1

    目录 前言 拦截器 异常拦截器 测试结果 身份验证拦截器 测试 小结 补充 2019-07-31 前言 一天天不知道怎么过的,但确实挺忙,事赶事不带停那种,让我感觉跟在流水线干活一样,忙活的事差不多了 ...

  6. net core Webapi基础工程搭建(一)——开发工具及环境

    目录 开发工具 版本 后端框架 开发工具 Visual Studio 2019,既然要折腾那就体验最新版的开发工具有什么特殊的地方,之前个人开发使用的是2017. 下载地址:https://visua ...

  7. net core Webapi基础工程搭建(四)——日志功能log4net

    目录 前言 log4net 依然是,NuGet引用第三方类库 整合LogUtil 小结 前言 一个完整的项目工程离不开日志文件的记录,而记录文件的方法也有很多,可以自己通过Stream去实现文件的读写 ...

  8. net core Webapi基础工程搭建(三)——在线接口文档Swagger

    目录 前言 Swagger NuGet引用第三方类库 别急,还有 没错,注释 小结 前言 前后分离的好处,就是后端埋头做业务逻辑功能,不需要过多考虑用户体验,只专注于数据.性能开发,对于前端需要的数据 ...

  9. 第十九节:Asp.Net Core WebApi基础总结和请求方式

    一. 基础总结 1.Restful服务改造 Core下的WebApi默认也是Restful格式服务,即通过请求方式(Get,post,put,delete)来区分请求哪个方法,请求的URL中不需要写方 ...

随机推荐

  1. MyBatis:choose标签的用法

    <!-- 4.2 choose用法 需求: 在已有的sys_user表中,除了主键id外,我们认为user_name也是唯一的, 所有的用户名都不可以重复.现在进行如下查询:当参数id有值的时候 ...

  2. Java编程思想:泛型接口

    import java.util.Iterator; import java.util.Random; public class Test { public static void main(Stri ...

  3. asp core 配置用户密码验证

    using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; usi ...

  4. idea万能快捷键(alt enter),你不知道的17个实用技巧!!!

    说明 IDEA里有一个万能快捷键(alt enter),功能非常强大,同一个快捷键,可以根据不同的语境提示你不同的操作, 很多人可能还不了解这些功能,在处理代码的时候还手动处理,了解这些技巧之后,你编 ...

  5. Eclipse中Cannot nest src folder解决方法

    错误示例: : Java Model Status [Cannot nest output folder 'xxx/bin/main' inside output folder 'xxx/bin'] ...

  6. 《ElasticSearch6.x实战教程》之实战ELK日志分析系统、多数据源同步

    第十章-实战:ELK日志分析系统 ElasticSearch.Logstash.Kibana简称ELK系统,主要用于日志的收集与分析. 一个完整的大型分布式系统,会有很多与业务不相关的系统,其中日志系 ...

  7. Java EE.JSP.内置对象

    JSP根据Servlet API 规范提供了某些内置对象,开发者不用事先声明就可以使用标准的变量来访问这些对象.JSP提供了九中内置对象:request.response.out.session.ap ...

  8. 《HelloGitHub》第 40 期

    <HelloGitHub>第 40 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程. ...

  9. 实现万行级excel导出---poi--ooxm的应用和采坑

    xl_echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加echo微信(微信号:t2421499075)交流学习. 百战不败,依不自称常胜,百败不颓,依能奋力前行.--这才是真正的堪称强大!! - ...

  10. 抓取崩溃的log日志

    1.下载adb工具包 也就是解锁软件,如果要解锁的话,需确认有fastboot 安装jdk.sdk 2.注意事项 请确保电脑上只连接了一台手机设备(最好只连接一条USB线),同时确保手机已开启USB调 ...