.NET 6 中,使用 ActionFilterAttribute 实现 AOP(面向切面编程)

news2024/12/29 10:06:55

AOP概述:AOP(面向切面编程)是一种编程规范的风格,通过'横切'的思想,将系统功能和业务功能分离开,以提高代码的可维护性和清晰度。

系统功能模块:

1、缓存模块:

作用:提高系统性能,通过缓存数据减少对数据库的直接访问。

操作:在代码进入业务功能之前的时候检查请求的数据中是否存在缓存中,如果不在就去数据库获取并存入缓存中。

2、验证模块:

作用:确保用户有权限访问特定业务方法。

操作:检查当前用户是否有权限,是否能进入下一步操作。

3.日志模块:

作用:记录用户操作和系统事件,便于后期分析和故障排查。

操作:在方法执行前后记录相关信息。

捕获异常后记录信息到日志中。

实现AOP:

可以通过创建一个自定义的过滤器类来实现。下面是一个简单的示例,演示如何创建和使用 ActionFilterAttribute 来拦截控制器动作,并在执行之前和之后插入自定义逻辑。

先安装依赖:

自定义过滤器实现类:

defaultActionFilter继承: ActionFilterAttribute 过滤器需要的方法。

 public class defaultActionFilter: ActionFilterAttribute
    {

        //在执行业务代码之前可以执行的方法
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            // 在动作执行之前执行的代码
            //实现一些系统功能代码
            Debug.WriteLine("执行控制器代码之前Action is executing...");
        }
          //在执行业务代码之后可以执行的方法
        public override void OnActionExecuted(ActionExecutedContext context)
        {
            // 在动作执行之后执行的代码
            Debug.WriteLine("执行控制器代码之后Action has executed.");
        }
        //这些方法允许您在返回结果之前。您可以在这两个方法中处理结果(例如修改响应或记录结果信息)。
        public override void OnResultExecuting(ResultExecutingContext context)
        {

            Console.WriteLine("返回结果之前");
            // 结果执行前]
        }
          //业务代码执行返回结果之后之后执行代码
        public override void OnResultExecuted(ResultExecutedContext context)
        {
            // 结果执行后 可以执行的代码
            Console.WriteLine("返回结果之后");
        }
 


    }
注册过滤器:
通过使用依赖注入的方式,可以在应用程序的任意地方解析和使用这个过滤器。 
builder.Services.AddScoped<defaultActionFilter>();

调用过滤器: 

可以将过滤器应用到整个控制器或特定的动作方法上。

整个控制器:

 特定的动作方法:
  [Route("/test")]
        [ServiceFilter(typeof(defaultActionFilter))]
        [HttpGet]
        public async Task<object> Test(string id) {

            return id;
        }

 

执行结果:

使用这些方法,您可以在控制器的整个生命周期内插入自定义逻辑,处理验证、授权、异常、结果等。这使得您能够在不干扰业务逻辑的情况下,集中管理各种横切关注点,提高代码的可读性和可维护性。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2169214.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenHarmony(鸿蒙南向)——平台驱动指南【MIPI CSI】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 CSI&#xff08;Camera Serial Interface&#xf…

wx小程序中,商城订单详情显示还有多少分钟关闭

问题&#xff1a;wx小程序中&#xff0c;商城订单详情需要显示还有多少分钟关闭 思路&#xff1a;创建订单时间戳和当前时间戳相减&#xff0c;得到时间差&#xff0c;再除1000&#xff0c;得到相差秒数&#xff0c;然后除60&#xff0c;向下取整&#xff0c;得到分钟。 代码如…

物联网行业中模组的AT指令详解以及使用

01 概述 AT 命令&#xff08;AT Commands&#xff09;最早是由发明拨号调制解调器&#xff08;MODEM&#xff09;的贺氏公司&#xff08;Hayes&#xff09;为了控制 MODEM 而发明的控制协议。后来随着网络带宽的升级&#xff0c;速度很低的拨号 MODEM 基本退出一般使用市场&am…

凌晨1点开播!Meta Connect 2024开发者大会,聚焦Llama新场景和AR眼镜

作者&#xff1a;十九 编辑&#xff1a;李宝珠 北京时间 9 月 26 日凌晨 1 点&#xff0c;Meta Connect 2024 开发者大会即将举行&#xff0c;马克扎克伯格将聚焦 AI 和元宇宙&#xff0c;向大家分享 Llama 模型的更多潜在应用&#xff0c;并介绍 Meta 最新产品 AR 眼镜和 Meta…

java基础 之 实现一个链表

文章目录 引言链表节点单向链表双向链表链表的优缺点 java封装的链表自己实现一下链表LinkNode节点类LinkedList类实现示例图代码 引言 1、新建的节点需要两个值&#xff1a;value 和 节点 next&#xff1b; 2、新建的节点链表需要有一个head&#xff1b; 3、根据位置对链表进行…

The Open Group 2024生态系统架构·可持续发展年度大会全面解读

在全球数字化转型加速的时代背景下&#xff0c;人工智能技术正以前所未有的速度重塑各行各业的生态系统。尤其是随着ChatGPT、Sora等技术的爆发&#xff0c;AIGC&#xff08;人工智能生成内容&#xff09;技术在多个领域展现出超越人类的能力&#xff0c;AGI&#xff08;通用人…

Llama 3.2:利用开放、可定制的模型实现边缘人工智能和视觉革命

在我们发布 Llama 3.1 模型群后的两个月内&#xff0c;包括 405B - 第一个开放的前沿级人工智能模型在内&#xff0c;它们所产生的影响令我们兴奋不已。 虽然这些模型非常强大&#xff0c;但我们也认识到&#xff0c;使用它们进行构建需要大量的计算资源和专业知识。 我们也听到…

成都网安周暨CCS2024 | 大模型安全与产业应用创新研讨活动成功举办

9月11日-12日&#xff0c;作为2024年国家网络安全宣传周成都系列活动的重磅活动之一&#xff0c;CCS 2024成都网络安全系列活动在成都举行。“大模型安全与产业应用创新研讨活动”同期举办&#xff0c;本场活动由百度安全、成都无糖信息联合承办&#xff0c;特邀云安全联盟CSA大…

MYSQL求月份同比数据和环比数据

1.需求题目如下 1.首先求出每月每个account_id 对应的amount金额 2.利用表自关联&#xff0c;获取上月&#xff0c;上年对应月份及金额&#xff0c; 关联条件利用 主表月份-1个月上月月份 和 主表月份-1年上年月份 3.最后求同比和环比 附代码及测试数据 CREATE TABLE transa…

HTML·第3章 表格布局与表单交互

3.1 表格概述 3.1.1 表格的结构 表格是由行和列组成的二维表&#xff0c;而每行又由一个或多个单元格组成&#xff0c;用于放置数据或其他内容。表格中的单元格是行与列的交叉部分&#xff0c;是组成表格的最基本单元。单元格的内容是数据&#xff0c;也称数据单元格。数据单元…

如何在 macOS(MacBook Pro、Air 和 iMac)上恢复未保存的 Word 文档

Microsoft Word 在许多用户中很受欢迎&#xff0c;并且有多种用途。无论是为学校写论文、在办公室写报告还是其他许多事情。但是不保存文档并丢失数据可能是您可能面临的最可怕的噩梦。但是&#xff0c;也有几种方法可以在 macOS 上恢复未保存的 Word 文档。 用户在 Windows P…

【C++笔试强训】如何成为算法糕手Day5

学习编程就得循环渐进&#xff0c;扎实基础&#xff0c;勿在浮沙筑高台 循环渐进Forward-CSDN博客 目录 循环渐进Forward-CSDN博客 第一题&#xff1a;游游的you 思路&#xff1a; 第二题&#xff1a;腐烂的苹果 思路&#xff1a; 第三题&#xff1a;孩子们的游戏 思路&…

RabbitMQ下载安装运行环境搭建

RabbitMQ运行环境搭建 1、Erlang及RabbitMQ安装版本的选择2、下载安装Erlang2.1、下载Erlang2.2、安装Erlang2.2.1、安装Erlang前先安装Linux依赖库2.2.2、解压Erlang压缩包文件2.2.3、配置2.2.4、编译2.2.5、安装2.2.6、验证erlang是否安装成功 3、RabbitMQ下载安装3.1、下载3…

基于SSM+小程序的医院核酸检测服务管理系统(医院2)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM小程序的医院核酸检测服务管理系统实现了管理员、用户管理、普通管理员、医护人员。 1、管理员实现了首页、用户管理、医护人员管理、普通管理员、通知公告管理、疫苗接种管理、核…

2023_Spark_实验九:编写WordCount程序(Scala版)

需求&#xff1a; 1、做某个文件的词频统计//某个单词在这个文件出现次数 步骤&#xff1a; 文件单词规律&#xff08;空格分开&#xff09;单词切分单词的统计&#xff08;k,v&#xff09;->(k:单词&#xff0c;V&#xff1a;数量&#xff09;打印 框架&#xff1a; 单…

基于RPA+BERT的文档辅助“悦读”系统 | OPENAIGC开发者大赛高校组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

毕业设计选题:基于ssm+vue+uniapp的鲜花销售小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

uniapp EChars图表

1. uniapp EChars图表 &#xff08;1&#xff09;Apache ECharts 一个基于 JavaScript 的开源可视化图表库   https://echarts.apache.org/examples/zh/index.html &#xff08;1&#xff09;官网图例 &#xff08;2&#xff09;个人实现图例 1.1. 下载echart 1.1.1. 下…

新手教学系列——系统模块划分原则:如何让系统架构更加灵活与高效

在现代软件开发中,模块化设计是一个至关重要的概念。对于初学者来说,理解如何合理划分系统模块不仅能提高代码的可读性,还能让系统架构更具灵活性和可维护性。本文将深入探讨模块划分的基本原则,结合功能边界和数据边界的划分实例,帮助大家在实际开发中掌握模块化设计的精…

高校竞赛管理系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统高校竞赛管理系统信息管理难度大&#xff0c;容错率低&am…