asp,net core 3.1 的过滤器(筛选器)
过滤器执行顺序#

- Authorization filters r最先运行,用于确定是否已针对请求为用户授权。 如果请求未获授权,授权筛选器可以让管道短路。
- Resource filters:
- 授权后运行。
- OnResourceExecuting 在筛选器管道的其余阶段之前运行代码。 例如,
OnResourceExecuting
在模型绑定之前运行代码。 - OnResourceExecuted 在管道的其余阶段完成之后运行代码。
- Action filters:
- 在调用操作方法之前和之后立即运行代码。
- 可以更改传递到操作中的参数。
- 可以更改从操作返回的结果。
- 页面 不 支持 Razor 。
- Exception filters 在向响应正文写入任何内容之前,对未经处理的异常应用全局策略。
- Result filters 在执行操作结果之前和之后立即运行代码。 仅当操作方法成功执行时,它们才会运行。 对于必须围绕视图或格式化程序的执行的逻辑,它们很有用。

同步和异步#
当要创建过滤器时,应该实现 IXXXFilter 或 IAsyncXXXFilter,这两个接口的区别是前者同步、后者异步。ASP.NET Core MVC 会首先检查异步实现,如果没有实现异步方式,则继续检查同步实现,因此在创建过滤器时,不需要同步接口和异步接口都实现。
public interface IAsyncActionFilter : IFilterMetadata
{
Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
}
public interface IActionFilter : IFilterMetadata
{
void OnActionExecuted(ActionExecutedContext context);
void OnActionExecuting(ActionExecutingContext context);
}
public class CustomActionFilter : IActionFilter,IAsyncActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
// Action执行之前
}
public void OnActionExecuted(ActionExecutedContext context)
{
//Action执行之后
}
public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
{
// Action执行之前
await next();
// Action执行之后
}
}
OnActionExecutionAsync
方法,该方法的第二个参数ActionExecutionDelegate
表示要执行的 Action
,它是一个委托类型,因此在这个方法的内部可以直接调用 next()
,并在 next()
前后执行相应的代码。
筛选器作用域和执行顺序#
可以将筛选器添加到管道中的以下三个 范围 之一:
- 在控制器操作上使用属性。 筛选器属性不能应用于 Razor 页面处理程序方法。
- 在控制器或页上使用特性 Razor 。
- 针对所有控制器、操作和页面全局 Razor 显示,如以下代码所示:
public void ConfigureServices(IServiceCollection services)
{
//2.1 services.AddMvc(...)
services.AddControllersWithViews(options =>
{
options.Filters.Add(typeof(MySampleActionFilter));
});
}
作者:【唐】三三
出处:https://www.cnblogs.com/tangge/p/14008429.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
分类:
ASP.NET Core
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具