当前位置: 首页 > news >正文

ASP.NET Core 6.0 使用 Action过滤器

Action过滤器

在ASP.NET Core中,Action过滤器用于在执行Action方法之前或之后执行逻辑。你可以创建自定义的Action过滤器来实现这一点。

继承 ActionFilterAttribute 类:

        [TypeFilter(typeof(CustomAllActionResultFilterAttribute))]public IActionResult Index4(int i){return Json(new{Id = 1,Name = "Tom",Age = 18});}

 写日志

public class CustomAllActionResultFilterAttribute:ActionFilterAttribute
{private readonly ILogger<CustomAllActionResultFilterAttribute> _ILogger;public CustomAllActionResultFilterAttribute(ILogger<CustomAllActionResultFilterAttribute> iLogger){this._ILogger = iLogger;}public override void OnActionExecuting(ActionExecutingContext context){var para = context.HttpContext.Request.QueryString.Value;var controllerName = context.HttpContext.GetRouteValue("controller");var actionName = context.HttpContext.GetRouteValue("action");_ILogger.LogInformation($"执行{controllerName}控制器--{actionName}方法;参数为:{para}");}public override void OnActionExecuted(ActionExecutedContext context){var result = Newtonsoft.Json.JsonConvert.SerializeObject(context.Result);var controllerName = context.HttpContext.GetRouteValue("controller");var actionName = context.HttpContext.GetRouteValue("action");_ILogger.LogInformation($"执行{controllerName}控制器--{actionName}方法:执行结果为:{result}");}public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next){var controllerName = context.HttpContext.GetRouteValue("controller");var actionName = context.HttpContext.GetRouteValue("action");var para = context.HttpContext.Request.QueryString.Value;_ILogger.LogInformation($"执行{controllerName}控制器--{actionName}方法;参数为:{para}");ActionExecutedContext executedContext = await next.Invoke(); //这句话执行就是去执行Action  var result = Newtonsoft.Json.JsonConvert.SerializeObject(executedContext.Result);_ILogger.LogInformation($"执行{controllerName}控制器--{actionName}方法:执行结果为:{result}");}public override void OnResultExecuting(ResultExecutingContext context){base.OnResultExecuting(context);}public override void OnResultExecuted(ResultExecutedContext context){base.OnResultExecuted(context);}public override Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next){return base.OnResultExecutionAsync(context, next);}
}

AlwaysRunResultFilter扩展定制

在之前学过的ActionFilter/ResourceFilter中只要是对HttpContext.Result赋值,就不再继续往后了。

在ASP.NET Core中,AlwaysRunResultFilter是一个实现了IAlwaysRunResultFilter接口的特性,它用于在执行结果执行之后执行一些操作,无论结果是否执行成功。

        [CustomCacheResourceFilter][CustomAlwaysRunResultFilter]public IActionResult Index5(){return Json(new{ Id =1,Name ="Tom",Age = 18});}
    public class CustomAlwaysRunResultFilterAttribute : Attribute, IAlwaysRunResultFilter{public void OnResultExecuting(ResultExecutingContext context){Console.WriteLine("CustomAlwaysRunResultFilterAttribute.OnResultExecuting");}public void OnResultExecuted(ResultExecutedContext context){Console.WriteLine("CustomAlwaysRunResultFilterAttribute.OnResultExecuted");}}

Filter的多种注册

AOP:在不修改之前的代码为基础上,动态增加功能,但是我们现在做的无论是ResourceFilter还是ActionFilter都是直接标记在方法上的,现在需要的是对某一些Action、或者对于某个项目整体生效。

方法注册:仅对当前方法生效

        [CustomCacheResourceFilter][CustomAlwaysRunResultFilter]public IActionResult Index5(){return Json(new{ Id =1,Name ="Tom",Age = 18});}


控制器(类)注册:对当前控制器下的所有Action都生效


全局注册:对于项目中的所有方法都生效,在Program.cs文件

// Add services to the container.
builder.Services.AddControllersWithViews(mvcOptions => 
{// 3.全局注册--对整个项目都生效的mvcOptions.Filters.Add<CustomCacheResourceFilterAttribute>();
});

匿名支持

单个Action注册是对于某一个Action生效,但是控制器、全局注册都是生效一大片。
那么在这样生效一部分中,如果希望在全局或者控制器注册后,其中有部分Action不生效,该怎么处理。(匿名支持)
系统提供了AllowAnonymousAttribute,有部分可以使用,有部分不能直接使用。

namespace Learn.NET6.Project.Utility.Filters
{public class CustomAllowAnonymousAttribute: Attribute{}
}
        #region 匿名支持/// <summary>/// 不支持缓存/// </summary>/// <returns></returns>//[AllowAnonymous][CustomAllowAnonymous]public IActionResult Index6(){return Json(new{ Id =1,Name ="Tom",Age=18});}#endregion

相关文章:

ASP.NET Core 6.0 使用 Action过滤器

Action过滤器 在ASP.NET Core中&#xff0c;Action过滤器用于在执行Action方法之前或之后执行逻辑。你可以创建自定义的Action过滤器来实现这一点。 继承 ActionFilterAttribute 类&#xff1a; [TypeFilter(typeof(CustomAllActionResultFilterAttribute))]public IActionRe…...

Java 并发集合:CopyOnWrite 写时复制集合介绍

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 016 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…...

Linux 查看修改系统时间| date -s

Linux 查看修改系统时间 date 命令的介绍date基本语法date命令使用示例显示指定条件的时间设置指定条件的时间时间加减操作显示文件最后修改时间显示 UTC 时间 备注 date 命令的介绍 date 命令在 Linux/Unix 系统上的使用。 date 命令可以用于查看和设置系统时间。 date基本语…...

数据库MySQL学习笔记

数据库MySQL学习笔记 主要记录常见的MySQL语句学习过程&#xff0c;增删改查。 -- 显示所有数据库 SHOW DATABASES;-- 创建新数据库 CREATE DATABASE mydatabase;-- 使用数据库 USE mydatabase;-- 显示当前数据库中的所有表 SHOW TABLES;-- 创建新表 CREATE TABLE users (id …...

四端口千兆以太网交换机与 SFP 扩展功能

在数字化时代&#xff0c;网络基础设施的重要性日益凸显&#xff0c;它是企业和个人取得成功的关键支撑。配备 SFP 插槽的 4 端口千兆以太网交换机提供了一种灵活且可扩展的网络解决方案&#xff0c;能够应对快速的数据传输、低延迟以及不断增长的带宽需求。本篇文章深入探讨了…...

Renderless 思想正在影响前端开发

本文由前端小伙伴方长_beezen 原创。欢迎大家踊跃投稿。 原文链接&#xff1a;https://juejin.cn/post/7385752495535472655 前言 截止到 2024 年&#xff0c;跨端应用开发所需要考虑的兼容性&#xff0c;已经涵盖了框架、平台和设备类型等多个方面&#xff0c;例如&#xff1…...

maven 打包执行配置(对maven引用的包或者丢进去的包都包含在里面)打成jar包

一 、springboot jar包 maven的pom文件 1 在resources下放了一些文件想打进去jar包 2 在lib下放了其他稀奇古怪jar包文件想打进去jar包 编写如下引入jar <build><!-- 打包名称 --><finalName>${project.artifactId}</finalName><resources><…...

Python酷库之旅-第三方库Pandas(004)

目录 一、用法精讲 5、pandas.DataFrame.to_csv函数 5-1、语法 5-2、参数 5-3、功能 5-4、返回值 5-5、说明 5-6、用法 5-6-1、代码示例 5-6-2、结果输出 6、pandas.read_fwf函数 6-1、语法 6-2、参数 6-3、功能 6-4、返回值 6-5、说明 6-6、用法 6-6-1、代码…...

天猫超市卡怎么用

猫超卡是在天猫超市里面消费用的卡 但是我们现在买东西都喜欢货比三家&#xff0c;肯定是哪家划算在哪买&#xff0c;要是淘宝其他店铺或京东卖的更便宜&#xff0c;猫超卡自然就用不上了 这种情况的话&#xff0c;还不如直接把猫超卡的余额提出来&#xff0c;买东西也不受限…...

ai智能语音机器人电销系统:让销售更快速高效

智能机器人电销系统是指采用人工智能和机器人技术来实现的自动电销工具。随着企业竞争加剧&#xff0c;销售团队面临的挑战也越来越大。在人力资源和成本控制方面有很大的限制&#xff0c;而传统的电销方式也已经无法满足市场需求&#xff0c;因此需要一种新的解决方案来提高营…...

Redis 中的通用命令(命令的返回值、复杂度、注意事项及操作演示)

Redis 中的通用命令(高频率操作) 文章目录 Redis 中的通用命令(高频率操作)Redis 的数据类型redis-cli 命令Keys 命令Exists 命令Expire 命令Ttl 命令Type命令 Redis 的数据类型 Redis 支持多种数据类型&#xff0c;整体来说&#xff0c;Redis 是一个键值对结构的&#xff0c;…...

【Hive实战】 HiveMetaStore的指标分析

HiveMetaStore的指标分析&#xff08;一&#xff09; 文章目录 HiveMetaStore的指标分析&#xff08;一&#xff09;背景目标部署架构 hive-site.xml相关配置元数据服务的指标相关配置 源码部分&#xff08;hive2.3系&#xff09;JvmPauseMonitor.javaHiveMetaStore的内部类HMS…...

【Linux系统】CUDA的安装与graspnet环境配置遇到的问题

今天在安装环境时遇到报错&#xff1a; The detected CUDA version (10.1) mismatches the version that was used to compile PyTorch (11.8). Please make sure to use the same CUDA versions. 报错原因&#xff1a;安装的cuda版本不对应&#xff0c;我需要安装cuda的版本…...

滤波算法学习笔记

目录 引言 一、定义 二、分类 三、常见滤波算法 四、应用与优势 五、发展趋势 例程 1. 均值滤波&#xff08;Moving Average Filter&#xff09; 2. 中值滤波&#xff08;Median Filter&#xff09; 3. 高斯滤波&#xff08;Gaussian Filter&#xff09; 4.指数移动…...

【机器学习】机器学习的重要方法——线性回归算法深度探索与未来展望

欢迎来到 破晓的历程博客 引言 在数据科学日益重要的今天&#xff0c;线性回归算法以其简单、直观和强大的预测能力&#xff0c;成为了众多领域中的基础工具。本文将详细介绍线性回归的基本概念、核心算法&#xff0c;并通过五个具体的使用示例来展示其应用&#xff0c;同时探…...

百度云智能媒体内容分析一体机(MCA)建设

导读 &#xff1a;本文主要介绍了百度智能云MCA产品的概念和应用。 媒体信息海量且复杂&#xff0c;采用人工的方式对视频进行分析处理&#xff0c;面临着效率低、成本高的困难。于是&#xff0c;MCA应运而生。它基于百度自研的视觉AI、ASR、NLP技术&#xff0c;为用户提供音视…...

笔记本电脑部署VMware ESXi 6.0系统

正文共&#xff1a;888 字 18 图&#xff0c;预估阅读时间&#xff1a;1 分钟 前面我们介绍了在笔记本上安装Windows 11操作系统&#xff08;Windows 11升级不了&#xff1f;但Win10就要停服了啊&#xff01;来&#xff0c;我教你&#xff01;&#xff09;&#xff0c;也介绍了…...

k8s 中间件

1. zookeeper 是的&#xff0c;Zookeeper 和 Kafka 经常一起使用&#xff0c;Zookeeper 在 Kafka 中扮演了关键角色。以下是 Zookeeper 和 Kafka 在实际项目中的结合使用及其作用的详细说明。 项目背景 假设我们有一个分布式数据处理系统&#xff0c;该系统需要高吞吐量的实…...

如何 提升需求确定性

提升需求确定性是确保项目成功的关键之一。以下是一些方法和策略可以帮助你提升需求的确定性&#xff1a; 积极的利益相关者参与&#xff1a; 确保所有关键利益相关者&#xff08;包括最终用户、业务所有者、开发团队等&#xff09;参与需求收集和确认过程。他们的参与可以提供…...

探索Sui的面向对象模型和Move编程语言

Sui区块链作为一种新兴的一层协议&#xff08;L1&#xff09;&#xff0c;采用先进技术来解决常见的一层协议权衡问题。Cointelegraph Research详细剖析了这一区块链新秀。 Sui使用Move编程语言&#xff0c;该语言专注于资产表示和访问控制。本文探讨了Sui的对象中心数据存储模…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...