IResultFilter
1、新建类CustomResultFilterAttribute继承Attribute, IResultFilter

1 using Microsoft.AspNetCore.Mvc; 2 using Microsoft.AspNetCore.Mvc.Filters; 3 using Project6.Model; 4 5 namespace Project6.Utility.Filters 6 { 7 public class CustomResultFilterAttribute : Attribute, IResultFilter 8 { 9 public CustomResultFilterAttribute() 10 { 11 Console.WriteLine("CustomResultFilterAttribute构造方法"); 12 } 13 public void OnResultExecuted(ResultExecutedContext context) 14 { 15 Console.WriteLine("OnResultExecuted"); 16 } 17 18 public void OnResultExecuting(ResultExecutingContext context) 19 { 20 if(context.Result is JsonResult) 21 { 22 JsonResult jsonResult = (JsonResult)context.Result; 23 context.Result = new JsonResult(new AjaxResult() 24 { 25 Success = true, 26 Message = "OK", 27 Data = jsonResult.Value 28 }); 29 } 30 } 31 } 32 }
2、类AjaxResult

1 namespace Project6.Model 2 { 3 public class AjaxResult 4 { 5 public bool Success { get; set; } 6 public string Message { get; set; } 7 public object Data { get; set; } 8 9 } 10 }
3、新建控制器CustomResultFilterController

1 using Microsoft.AspNetCore.Mvc; 2 using Project6.Utility.Filters; 3 4 namespace Project6.Controllers 5 { 6 public class CustomResultFilterController : Controller 7 { 8 9 public CustomResultFilterController() 10 { 11 Console.WriteLine("控制器构造函数被执行"); 12 } 13 14 [CustomResultFilterAttribute] 15 public IActionResult Index() 16 { 17 return Json(new 18 { 19 Id = 123, 20 Name = "net" 21 }); 22 } 23 } 24 }
4、在各个方法处设置断点,运行程序/CustomResultFilter
可以发现当程序第一次启动的时候CustomResultFilterAttribute的构造方法被执行,只运行一次。
之后运行/CustomResultFilter程序的执行顺序是:
CustomResultFilterController构造方法-->
CustomResultFilterController控制器的Index方法-->执行到return返回结果后执行
CustomResultFilterAttribute.OnResultExecuting-->
CustomResultFilterAttribute.OnResultExecuted
结论:IResultFilter在Action输出结果前执行。可以用来对输出结果进行修饰重构。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现