• asp.net core mvc之 过滤器


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

    一、过滤器的作用域

    1、全局过滤器,   在Startup.cs文件中注册
    2、控制器过滤器, 在控制器类上面使用标注
    3、action过滤器

    二、全局过滤器使用

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

    1. public class TestActionFilter : IActionFilter
    2. {
    3. public void OnActionExecuted(ActionExecutedContext context)
    4. {
    5. Debug.WriteLine("Action执行之后执行这里的代码");
    6. }
    7. public void OnActionExecuting(ActionExecutingContext context)
    8. {
    9. Debug.WriteLine("Action执行之前执行这里的代码");
    10. }
    11. }

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

    注意: 

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

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

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

    特性类包含下面一些

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

    1、core目录添加 MyResultFilterAttribute.cs 类

    1. public class MyResultFilterAttribute : ResultFilterAttribute
    2. {
    3. public string Val { get; set; }
    4. public override void OnResultExecuted(ResultExecutedContext context)
    5. {
    6. }
    7. public override void OnResultExecuting(ResultExecutingContext context){
    8. }
    9. }

    2、控制器,Action调用

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

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

    1. public class BaseController : Controller
    2. {
    3. public override void OnActionExecuted(ActionExecutedContext context)
    4. {
    5. base.OnActionExecuted(context);
    6. Debug.WriteLine("Action执行之后执行这里的代码");
    7. }
    8. public override void OnActionExecuting(ActionExecutingContext context)
    9. {
    10. base.OnActionExecuting(context);
    11. Debug.WriteLine("Action执行之前执行这里的代码");
    12. }
    13. }

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

  • 相关阅读:
    vite + vu3 + ts 项目,npm run build 报错
    C语言实验二 数据类型、运算符和表达式
    如何在USGS下载Landsat 8-9影像(2022年版)
    Spring Boot+Vue3前后端分离实战wiki知识库系统之用户管理&单点登录
    有人会做媒体交互设计类的吗,需要厉害一点的,有偿有偿!!
    记一次清理挖矿病毒的过程
    五子棋小游戏——Java
    HuggingFace-利用BERT预训练模型实现中文情感分类(下游任务)
    查看ubuntu版本
    走向IPv6,阿里巴巴IPv6规模化部署实践
  • 原文地址:https://blog.csdn.net/tiz198183/article/details/134423438