AOP能在不破坏代码封装的前提下,去额外扩展功能
优点:
1. 聚焦业务逻辑,轻松扩展功能
2.代码复用,集中管理
下面开始 Filter 的例子
1. Exception Filter
异常过滤器:在服务器向客户端写入响应内容之前,如果系统引发了异常,异常过滤器可以捕获该异常,该过滤器作用于全局范围,这也是最常用的过滤器

新建控制器 FilterController.cs 添加 两个action 和 添加对应的视图,index 用特性 ,info 没有特性。

生成编译 -> 运行 先浏览 index -> 异常直接捕获到了
而 info 没有特性,异常直接显示在页面上。
以上是 action 的特性
接下来换成 控制器 用特性
修改 FilterController.cs 把 index 特性去掉 ,控制器用特性

生成编译 -> 运行 可以看到两个页面都捕获了
接下来再试试全局的。这样就不用改变修改控制器就能捕获异常和处理异常了
修改 FilterController.cs , 去掉控制器注册的特性

接着修改 Startup.cs , 注册 CustomExceptionFilterAttribute.cs ,就完成

这样就所有控制器异常都能捕获到,又不用修改控制器,简单的AOP就完成了
网友评论