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 }
View Code
复制代码

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 }
View Code
复制代码

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 }
View Code
复制代码

4、在各个方法处设置断点,运行程序/CustomResultFilter

可以发现当程序第一次启动的时候CustomResultFilterAttribute的构造方法被执行,只运行一次。

之后运行/CustomResultFilter程序的执行顺序是:

CustomResultFilterController构造方法-->

CustomResultFilterController控制器的Index方法-->执行到return返回结果后执行

CustomResultFilterAttribute.OnResultExecuting-->

CustomResultFilterAttribute.OnResultExecuted

 

结论:IResultFilter在Action输出结果前执行。可以用来对输出结果进行修饰重构。

posted @   ziff123  阅读(102)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示