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控制器

相关推荐
ajassi20002 天前
开源 C# .net mvc 开发(八)IIS Express轻量化Web服务器的配置和使用
linux·开源·c#·mvc·.net
合作小小程序员小小店2 天前
web网页开发,在线%ctf管理%系统,基于html,css,webform,asp.net mvc, sqlserver, mysql
mysql·sqlserver·性能优化·asp.net·mvc
Exclusive_Cat2 天前
SpringMVC参数接收与数据返回详解
spring·mvc
Penk是个码农4 天前
web前端面试-- MVC、MVP、MVVM 架构模式对比
前端·面试·mvc
圆滚滚肉肉5 天前
后端MVC(控制器与动作方法的关系)
后端·c#·asp.net·mvc
ajassi20006 天前
开源 C# .net mvc 开发(六)发送邮件、定时以及CMD编程
linux·开源·c#·mvc
blackA_15 天前
JavaWeb学习——day8(MVC模式与session、cookie)
学习·mvc
PHASELESS41117 天前
深入理解Spring MVC:构建灵活Web应用的基石
java·网络·后端·spring·mvc
王有品19 天前
Spring MVC 会话管理实践教程:HttpSession 深入应用
java·spring·mvc
lwb_011819 天前
Spring MVC参数绑定终极手册:单&多参对象集合JSON文件上传精讲
spring·json·mvc