.Net Core AlwaysRunResultFilter
1..Net Core ActionFilter2..Net Core ResourceFilter3..Net Core Jwt鉴权授权4..Net Core Mvc Razor 组件5..Net Core Autofac6..Net Core ActionFilter7..Net Core ExceptionFilter
8..Net Core AlwaysRunResultFilter
9..Net Core EntityFrameCore10..Net Core 读取配置文件11..Net Core NLog+oracel12..Net Core MiddleWare13..Net Core WebApi14..Net Core gRpc调用目录
作用
- 修改返回值,始终会触发,即使filter已经中断也会执行AlwaysRunFilter
- 任何时刻都会执行一遍, 可以在做了缓存的时候(如果有缓存并中断了,只有AlwaysRunFilter会执行),将一部3. 分查数据库的数据添加进去
- 返回前触发一次
- 返回后触发一次
如果都设置执行顺序为:
- ResultExecutingContext
- 返回值 (ActionResult)
- ResultExecutedContext
实现
IAlwaysRunResultFilter
- 需要继承 Attribute 并实现 IAlwaysRunResultFilter
- 实现接口方法
执行顺序为:
- OnResultExecutionAsync
- 返回值
- ResultExecutedContext
IAsyncAlwaysRunResultFilter
- 需要继承 Attribute并实现 IAsyncAlwaysRunResultFilter
- 实现接口方法
- 该接口只提供一个 OnResultExecutionAsync方法,如果想执行ResultExecutedContext方法,需要执行方法中ResultExecutionDelegate委托并取返回值然后代码在执行为ResultExecutedContext方法
执行顺序为:
- OnResultExecutionAsync
- 返回值
- ResultExecutedContext
Demo
CustomAsyncAlwaysRunResultFilterAttribute.cs
sing Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace Cnpc.Com.Ioc.WebApp.Filter.AlwaysRunFilter
{
public class CustomAsyncAlwaysRunResultFilterAttribute : Attribute, IAsyncAlwaysRunResultFilter
{
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{
{
JsonResult json = (JsonResult)context.Result; //修改返回值并在基础上增加新的数据
context.Result = new JsonResult(new
{
sussces = true,
httpStatus = 200,
result = json.Value
});
}
ResultExecutedContext executed = await next();
{
Console.WriteLine("ResultExecutedContext");
}
}
}
}
全局注册
Program.cs
builder.Services.AddControllersWithViews(
options =>
{
//这样注册将对所有action 都生效
options.Filters.Add<CustomAsyncAlwaysRunResultFilterAttribute>();
}).AddControllersAsServices();
合集:
C#
分类:
DotNetCore
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?