ASP.NET Core MVC 过滤器
参考网址:https://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-4_4_3-filters.html
ASP.NET Core有五种类型的过滤器,每个过滤器类型在过滤器管道中的不同阶段执行:
Authorization Filter:授权过滤器在过滤管道中第一个执行,通常用于验证当前请求的合法性,不合法后面的管道会直接跳过。它们只有一个Before方法,不像其它大多数过滤器支持前置阶段方法和后置阶段方法。(不要在授权过滤器中抛出异常,因为没有任何代码来处理异常)
Resource Filter:资源过滤器是第二个运行,在Authorization Filter之后,Model Binding之前执行。在性能方面,资源过滤器在实现缓存或截断过滤器管道尤为重要。
Action Filter:使用率最高的过滤器,在调用Action方法之前和之后执行代码。和Resource Filter类似,但Model Binding在之后执行。
Exception Filter:用于为应用程序执行异常处理策略。
Result Filter:当Action执行完成后,最后会执行过滤器。用于处理ActionResult结果输出策略。
过滤器运行顺序:

同步过滤器和异步过滤器:
using FiltersSample.Helper;
using Microsoft.AspNetCore.Mvc.Filters; namespace FiltersSample.Filters
{
public class MyActionFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// do something before the action executes
} public void OnActionExecuted(ActionExecutedContext context)
{
// do something after the action executes
}
}
}
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.Filters; namespace FiltersSample.Filters
{
public class MyAsyncActionFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// do something before the action executes
await next();
// do something after the action executes
}
}
}
(注意:只能实现一个类型的过滤器,要么同步过滤器,要么异步过滤器,若同时实现了两个过滤器,只有异步方法会被调用)
过滤器作用域:
过滤器具有三种不同级别的作用域。
可以在特定的Action上使用特性Attribute的方式添加;
可以在控制器上使用特性的方式添加,它将作用该控制器下的所有Action;
注册一个全局过滤器,它将作用于整个MVC应用下的所有Action。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
//options.Filters.Add(typeof(MyActionFilter)); // by type
options.Filters.Add(new MyActionFilter()); // an instance
});
}
//过滤器可以通过类型添加,也可以通过实例添加
//如果通过实例添加,则该实例会作用于每一次请求
//如果通过类型添加,则每一次请求都会type-actived(即每次请求都会创建该类型的实例)
取消与短路:
过滤器方法的上下文参数中的Result属性可以在过滤器管道的任意一点短路管道。
ASP.NET Core MVC 过滤器的更多相关文章
- 解说asp.net core MVC 过滤器的执行顺序
asp.net core MVC 过滤器会在请求管道的各个阶段触发.同一阶段又可以注册多个范围的过滤器,例如Global范围,controller范围等.以ActionFilter为例,我们来看看过滤 ...
- ASP.NET Core MVC 过滤器介绍
过滤器的作用是在 Action 方法执行前或执行后做一些加工处理.使用过滤器可以避免Action方法的重复代码,例如,您可以使用异常过滤器合并异常处理的代码. 过滤器如何工作? 过滤器在 MVC Ac ...
- asp.net core MVC 全局过滤器之ExceptionFilter异常过滤器(一)
本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter异常过滤器(一) asp.net cor ...
- asp.net core MVC 过滤器之ActionFilter过滤器(二)
本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core ...
- Asp.Net Core MVC框架内置过滤器
第一部分.MVC框架内置过滤器 下图展示了Asp.Net Core MVC框架默认实现的过滤器的执行顺序: Authorization Filters:身份验证过滤器,处在整个过滤器通道的最顶层.对应 ...
- asp.net core MVC 过滤器之ExceptionFilter过滤器(一)
简介 异常过滤器,顾名思义,就是当程序发生异常时所使用的过滤器.用于在系统出现未捕获异常时的处理. 实现一个自定义异常过滤器 自定义一个异常过滤器需要实现IExceptionFilter接口 publ ...
- ASP.NET Core 中文文档 第四章 MVC(01)ASP.NET Core MVC 概览
原文:Overview of ASP.NET Core MVC 作者:Steve Smith 翻译:张海龙(jiechen) 校对:高嵩 ASP.NET Core MVC 是使用模型-视图-控制器(M ...
- asp.net core mvc实现伪静态功能
在大型网站系统中,为了提高系统访问性能,往往会把一些不经常变得内容发布成静态页,比如商城的产品详情页,新闻详情页,这些信息一旦发布后,变化的频率不会很高,如果还采用动态输出的方式进行处理的话,肯定会给 ...
- 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-4
来个目录吧: 第一章-入门 第二章- Entity Framework Core Nuget包管理 第三章-创建.修改.删除.查询 第四章-排序.过滤.分页.分组 第五章-迁移,EF Core 的co ...
随机推荐
- SAP MM MB5L 报表里的差异金额如何调整?
SAP MM MB5L 报表里的差异金额如何调整? 5月3号,收到财务顾问提出的一个问题,说是MB5L报表里有差异. 如下查询条件, 报表结果里显示有差异, 经查,导致这个差异的原因之一是,一些物料批 ...
- 工具类ToastUtil 避免在子线程中使用抛异常 "Can't create handler inside thread that has not called Looper.prepare()"
package com.example.kbr.utils; import android.view.Gravity; import android.widget.Toast; import io.r ...
- 用linux编译并运行c文件
目录 创建一个.c文件 写完代码以后进行编译 @(用linux编译并运行c文件) 创建一个.c文件 vi 文件名.c 对于图形化的linux,需要右键桌面,在终端中打开,输入vi 文件名.c就创建了一 ...
- Springboot中定时器的简单使用
在定时器的类上添加注解: @Component@EnableAsync@EnableScheduling 一.普通的定时器: 每天15:10执行的定时器 @Scheduled(cron="0 ...
- Linux—运行yum报错:No module named yum
产生原因:yum基于python写的,根据报错信息提示,是yum的python版本对应不上目前python环境的版本导致的.也就是说 有人升级或者卸载了python. 解决方式: # 查看yum版本 ...
- Linux—yum使用详解
yum配置 yum的配置文件在 /etc/yum.conf 参考:https://www.cnblogs.com/yhongji/p/9384780.html yum源配置 yum源文件在 /et ...
- [日常] 前端资源测试机上忽略版本号的的nginx配置
利用nginx的rewrite的指令,可以实现url的重新跳转,rewrtie有四种不同的flag,分别是redirect(临时重定向).permanent(永久重定向).break和last.其中前 ...
- JAVA基础复习(重点)
一. 初识Java编程 1. Java开发环境 JDK Java开发工具 JVM Java虚拟机 JRE Java运行环境 2.实现第一个hello world public cl ...
- 6. Go语言—字符串操作
一.字符串支持的转义字符 \r 回车符(返回行首) \n 换行符(直接跳到下一行的同列位置) \t 制表符 \' 单引号 \" 双引号 \\ 反斜杠 \uXXXX Unicode字符码值转义 ...
- SQL(一)简介
select * from websites 使用的sql为: /* Navicat MySQL Data Transfer Source Server : 127.0.0.1 Source Serv ...