asp.net core mvc之 过滤器

过滤器允许我们在Action执行之前和执行之后去执行一下业务代码

一、过滤器的作用域

1、全局过滤器, 在Startup.cs文件中注册

2、控制器过滤器, 在控制器类上面使用标注

3、action过滤器

二、全局过滤器使用

1、在 core 目录,添加 TestActionFilter.cs 类并继承IActionFilter 实现

cs 复制代码
    public class TestActionFilter : IActionFilter
    {
        public void OnActionExecuted(ActionExecutedContext context)
        {
            Debug.WriteLine("Action执行之后执行这里的代码");
        }

        public void OnActionExecuting(ActionExecutingContext context)
        {
            Debug.WriteLine("Action执行之前执行这里的代码");
        }
    }

2、在Startup.cs 添加全局变量过滤器

注意:

就算是区域的action 也会跳进这个过滤器里面的。所以关于全局过滤器 大家应该要谨慎使用。因为所有的请求 都会执行过滤器里面的代码。所以如果一些非常耗时的操作 不应该加到全局过滤器里面。
全局过滤器 主要处理一些 比如 防盗链 权限认证这些操作

三、控制器和Action级别过滤器

可以在控制器上面 进行标注使用某个过滤器控制器和Action的过滤器,需要实现一个特性类(如:ResultFilterAttribute)然后在里面 也可以实现OnResultExecuting另外 还可以添加自定义的属性。

特性类包含下面一些

ResultFilterAttribute 结果后过滤器
ActionFilterAttribute 执行前后过滤器
ExecutionFilterAttribute 异常过滤器
FormatFilterAttribute 格式化过滤器
ServiceFilterAttribute 服务过滤器
TypeFilterAttribute

1、core目录添加 MyResultFilterAttribute.cs 类

cs 复制代码
    public class MyResultFilterAttribute : ResultFilterAttribute
    {
        public string Val { get; set; }
        public override void OnResultExecuted(ResultExecutedContext context)
        {

        }
        public override void OnResultExecuting(ResultExecutingContext context){
        
        }
    }

2、控制器,Action调用

四、重写控制器基类的OnActionExecuted、OnActionExecuting两个方法,达到过滤器的效果

1、Controllers 文件夹添加 BaseController.cs类,继承Controller

cs 复制代码
    public class BaseController : Controller
    {
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            base.OnActionExecuted(context);
            Debug.WriteLine("Action执行之后执行这里的代码");
        }

        public override void OnActionExecuting(ActionExecutingContext context)
        {
            base.OnActionExecuting(context);
            Debug.WriteLine("Action执行之前执行这里的代码");
        }
    }

2、所有控制继承BaseController控制器

相关推荐
Cyan_RA91 天前
SpringMVC 请求数据绑定与参数映射 详解
java·后端·spring·mvc·springmvc·映射请求数据
Cyan_RA93 天前
SpringMVC REST 详解
java·spring·mvc·springmvc·restful·jquery·jsp
budingxiaomoli6 天前
Spring Web MVC 知识总结
spring·mvc
虾米Life7 天前
MVC与MVVM 架构
架构·mvc·mvvm
笛卡尔的心跳9 天前
Spring MVC 注解
java·spring·mvc
小松加哲10 天前
Spring MVC 核心原理全解析
java·spring·mvc
那个失眠的夜10 天前
RESTful 语法规范 核心注解详解
java·spring·mvc·mybatis
羌俊恩10 天前
Centos环境django项目部署过程
django·flask·centos·mvc·mtv·web项目框架
Foreer黑爷12 天前
Spring MVC原理与源码:从请求到响应的全流程解析
java·spring·mvc
曹牧13 天前
Spring MVC中使用HttpServletRequest和HttpServletResponse
java·spring·mvc