(五).NET Core中过滤器Filter的使用介绍
知识点回顾:
前面几篇文章分别给大家介绍了
(1)Swagger的集成和用法;
(2)JWT身份验证的集成和用法;
(3)OOM框架AnutoMapper对象映射的用法;
今天给大家介绍过滤器Filter的基本使用:
过滤器有什么作用,在什么场景下适合用到它?
假设一个项目进展到快结束的时候,项目leader为了保证程序的稳定性和可监控和维护性要求将所有的方法加上日志,如果项目比较庞大,方法非常多,那岂不是得费很大得劲来完成这样一件事情。不过不用担心,咋们遇到的问题,伟大的语言设计者早已帮我们想好了解决办法过滤器,过滤器是一种AOP(面向切面编程)技术的体现,AOP具有松耦合,易扩展,代码可复用的特点。
通常我们在这些场景下如身份验证、日志记录、异常获取等会使用到过滤器
.NET Core中的过滤器生命周期:
![](https://img2018.cnblogs.com/common/1725277/201911/1725277-20191105132559744-1475160730.png)
.NET Core中的过滤器有多种,今天给大家主要介绍ActionFilterAttribute的用法
(1)自定义一个Filter类:
public class LogFilter: ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); /* todo OnActionExecuting */ } public override void OnActionExecuted(ActionExecutedContext filterContext) { base.OnActionExecuted(filterContext); /* todo OnActionExecuted */ } public override void OnResultExecuting(ResultExecutingContext filterContext) { base.OnResultExecuting(filterContext); /* todo OnResultExecuting */ } public override void OnResultExecuted(ResultExecutedContext filterContext) { base.OnResultExecuted(filterContext); /* todo OnResultExecuted */ }
(2)注册过滤器,注册过滤器有两种方式,一种是全局注册,另一种是局部注册:
//全局注册,在ConfigureServices方法中添加注册代码: services.AddMvc(option => { option.Filters.Add(typeof(LogFilter)); }); //全局注册过滤器
局部注册,局部注册可以体现在类或方法上:
![](https://img2018.cnblogs.com/common/1725277/201911/1725277-20191105132654104-172096879.png)
(3)运行,请求一个具体接口,跟踪一下执行顺序:
![](https://img2018.cnblogs.com/common/1725277/201911/1725277-20191105132712020-1240573399.png)
![](https://img2018.cnblogs.com/common/1725277/201911/1725277-20191105132723834-604670459.png)
可以看到过滤器起到了对应的作用。