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 @ 2022-05-03 22:05  ziff123  阅读(107)  评论(0)    收藏  举报