ASP.NET Core 6.0 使用 资源过滤器和行为过滤器
1.AOP 面向切面编程 概念
AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在通过预定义的模式(即“切面”)对程序的横切关注点进行模块化。横切关注点是一个在多个应用模块中出现的概念,例如日志记录、事务管理、安全检查等。AOP允许开发者定义“切面”来跨方法、跨类甚至跨应用来操作这些关注点,从而提供了一种从业务逻辑代码中分离出横切关注点的机制。
AOP的核心概念包括连接点(Join Point)、切点(Pointcut)、通知(Advice)、切面(Aspect)等。连接点是在程序执行过程中的一些特定点,如方法的调用或特定异常被抛出。切点则定义了在哪些连接点应用通知的规则。通知是切面的实际行为,它描述了当与切点匹配的方法被调用时应执行的操作。切面则是一个封装了通知和切点的模块,它定义了在何处(切点)以及怎样(通知)进行横切。
AOP的主要优势在于:
- 降低模块间的耦合度:通过将横切关注点从业务逻辑中分离出来,AOP有助于减少代码之间的依赖关系,使得业务逻辑更加清晰和可维护。
- 提高代码的可重用性:切面可以在不同的应用或模块中重复使用,从而提高了代码的可重用性。
- 增强系统的可扩展性:当需要添加新的横切关注点时,只需要定义新的切面和通知即可,而无需修改现有的业务逻辑代码。
AOP提供了一种灵活且强大的方式来处理程序中的横切关注点,使得开发者能够更加专注于业务逻辑的实现,同时提高了代码的可维护性、可扩展性和可读性。
比如说异常处理,在每一个 Ation 中用 try ... catch 捕获异常,这样就存在大量的重复代码。
普通方式解决:
大量的重复代码
大量的测试工作
违背了开闭原则
面向切面编程AOP
Aspect Oriented Programming 在不修改之前的代码为基础,可以动态的增加业务逻辑:
如果可以在已经成型的程序中,如果可以动态在某些行为之前增加点内容;在某些行为之后增加点内容----之前已经开发好的内容保持不变;
2.ASP.NET Core中的AOP--Filter
AuthorizeAttribute
权限验证
IResourceFilter 扩展
常见作用:资源缓存,ASP.NET Core6提供的是接口 IResourceFilter。
例子:
public class CustomResourceFilterAttribute : Attribute, IResourceFilter{/// <summary>/// 在资源之前/// </summary>/// <param name="context"></param>public void OnResourceExecuting(ResourceExecutingContext context){Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuting");}/// <summary>/// 在资源之后/// </summary>/// <param name="context"></param>public void OnResourceExecuted(ResourceExecutedContext context){Console.WriteLine("CustomResourceFilterAttribute.OnResourceExecuted");}}
[CustomResourceFilter]public IActionResult Index(){return View();}
执行顺序:
- a.CustomResourceFilterAttribute.0nResourceExecuting
- b.控制器的构造函数实例化控制器
- c.执行Action方法
- d.CustomResourceFilterAttribute.0nResourceExecuted
IResourceFilter 场景应用
使用缓存
public class ThirdController : Controller{public ThirdController(){}[CustomResourceFilter]public IActionResult Index(){
相关文章:
ASP.NET Core 6.0 使用 资源过滤器和行为过滤器
1.AOP 面向切面编程 概念 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,旨在通过预定义的模式(即“切面”)对程序的横切关注点进行模块化。横切关注点是一个在多个应用模块中出现的概念,例如日志记录、事务管理、安全检查等。AOP允许开发者定义“切面”…...

电脑屏幕花屏怎么办?5个方法解决问题!
“我刚刚打开电脑就发现我的电脑屏幕出现了花屏的情况。这让我很困惑,我应该怎么解决这个问题呢?求帮助。” 在这个数字时代的浪潮中,电脑早已成为我们生活中不可或缺的一部分。然而,当你正沉浸在紧张的游戏对战中,或是…...

git 初基本使用-----------笔记
Git命令 下载git 打开Git官网(git-scm.com),根据自己电脑的操作系统选择相应的Git版本,点击“Download”。 基本的git命令使用 可以在项目文件下右击“Git Bash Here” ,也可以命令终端下cd到指定目录执行初始化命令…...

Redis-数据类型-Bit的基本操作-getbit-setbit-Bitmap
文章目录 0、Bitmaps(位图)1、查看redis是否启动2、通过客户端连接redis3、切换到db7数据库4、设置(或覆盖)一个键(key)的值(value)5、获取存储在给定键(key)…...

统信UOS上鼠标右键菜单中添加自定义内容
原文链接:统信UOS上鼠标右键菜单中添加自定义内容 Hello,大家好啊!今天给大家带来一篇关于在统信UOS桌面操作系统上鼠标右键菜单中添加自定义内容的文章。通过自定义鼠标右键菜单,可以大大提升日常操作的效率和便捷性。本文将详细…...

学习入门 chatgpt原理 一
学习文章:人人都能看懂的chatGpt原理课 笔记作为学习用,侵删 Chatph和自然语言处理 什么是ChatGpt ChatGPT(Chat Generative Pre-training Transformer) 是一个 AI 模型,属于自然语言处理( Natural Lang…...

生命在于学习——Python人工智能原理(4.7)
四、Python的程序结构与函数 4.4 函数 函数能将代码划分为若干模块,每一个模块可以相对独立的实现某一个功能,函数有两个主要功能,分别是降低编程难度和实现代码复用,函数是一种功能抽象,复用它可以将一个复杂的大问…...

经典游戏案例:仿植物大战僵尸
学习目标:仿植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum…...
[Day 18] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
強化學習與生成對抗網絡(GAN) 引言 強化學習 (Reinforcement Learning, RL) 和生成對抗網絡 (Generative Adversarial Networks, GANs) 是現代人工智能中的兩大關鍵技術。強化學習使得智能體可以通過與環境交互學習最佳行動策略,而生成對抗網絡則通過兩個相互競爭…...

【Mac】DMG Canvas for mac(DMG镜像制作工具)软件介绍
软件介绍 DMG Canvas 是一款专门用于创建 macOS 磁盘映像文件(DMG)的软件。它的主要功能是让用户可以轻松地设计、定制和生成 macOS 上的安装器和磁盘映像文件,以下是它的一些主要特点和功能。 主要特点和功能 1. 用户界面设计 DMG Canva…...
RAG分块方法 从固定大小到自然语言处理分块——深入研究文本分块技术
发掘文本分块-准确的搜索结果和更智能的语言模型背后的秘诀,通过了解如何有效地分块文本,我们可以改进索引文档、处理用户查询和利用搜索结果的方式。准备好揭开文本分块的秘密了吗? 一、了解分块 分块是一种旨在嵌入尽可能少噪音的内容,同…...
FFmpeg 系列
📚 此篇文章是先引入ffmpeg的概念以及主要的功能,后面会根据每一个特点进行详解,喜欢ffmpeg的可以持续关注。 ffmpeg是什么? FFmpeg 是一个开源的跨平台音视频处理工具,它可以用来录制、转换以及流化音视频内容。具体…...

240626_昇思学习打卡-Day8-稀疏矩阵
240626_昇思学习打卡-Day8-稀疏矩阵 稀疏矩阵 在一些应用场景中,比如训练二值化图像分割时,图像的特征是稀疏的,使用一堆0和极个别的1表示这些特征即费事又难看,此时就可以使用稀疏矩阵。通过参考大佬博文,结合个人理…...
Docker: 使用容器化数据库
使用容器化数据库 使用本地容器化数据库提供了灵活性和简易的设置,使您能够在不需要传统数据库安装开销的情况下,紧密模拟生产环境。Docker 简化了这一过程,只需几条命令就可以在隔离的容器中部署、管理和扩展数据库。 在本指南中,您将学习如何: 运行本地容器化数据库访…...
Oracle对用户敏感数据进行编码处理
由于系统运行时间比较长,没有对用户的身份证号、邮箱、手机号进行脱敏处理,后期对数据进行了编码。 更新表数据 sql UPDATE sys_staff SET MOBIL_PHONE CASEWHEN MOBIL_PHONE IS NULL THEN ELSE utl_raw.cast_to_varchar2(utl_encode.base64_encode(ut…...
VXLAN详解:概念、架构、原理、搭建过程、常用命令与实战案例
一、VXLAN概述 1.1 VXLAN的定义 VXLAN(Virtual Extensible LAN,虚拟可扩展局域网)是一种网络虚拟化技术,通过在现有IP网络上创建虚拟网络,使数据中心可以实现大规模的网络隔离和扩展。VXLAN使用MAC-in-UDP封装技术&a…...

Redis-数据类型-Hash
文章目录 1、查看redis是否启动2、通过客户端连接redis3、切换到db3数据库4、插入新数据返回15、获取指定哈希(hash)对象的所有字段(field)名6、获取存储在指定哈希(hash)对象中的所有字段(fiel…...

基于redisson实现tomcat集群session共享
目录 1、环境 2、修改server.xml 3、修改context.xml 4、新增redisson配置文件 5、下载并复制2个Jar包到Tomcat Lib目录中 6、 安装redis 7、配置nginx负载均衡 8、配置测试页面 9、session共享测试验证 前言: 上篇中,Tomcat session复制及ses…...

postgres数据库的流复制
1. 流复制和逻辑复制的差异 逻辑复制和流复制最直观的不同是,逻辑复制支持表级别复制区分点事原理不同 逻辑日志是在wal日志产生的数据库上,由逻辑解析模块对wal日志进行初步的解析,解析结果是ReorderBufferChange(理解为HeapTup…...
Dxf库中的DL_Extrusion类
类DL_Extrusion DL_Extrusion 是 DXF 库中的一个类,用于表示三维实体的扩展信息。在 DXF 文件中,DL_Extrusion 类通常用于表示具有高度的三维图形实体,如立方体、圆柱体等,以及其它具有体积的几何对象。 以下是一个简单的示例代…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...