1、新建类CustomAsyncResultFilterAttribute继承Attribute, IAsyncResultFilter
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 CustomAsyncResultFilterAttribute : Attribute, IAsyncResultFilter 8 { 9 public CustomAsyncResultFilterAttribute() 10 { 11 Console.WriteLine("过滤器的构造函数被执行"); 12 } 13 14 public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) 15 { 16 if(context.Result is JsonResult) 17 { 18 JsonResult jsonResult = (JsonResult)context.Result; 19 context.Result = new JsonResult(new AjaxResult() 20 { 21 Success = true, 22 Message ="OK", 23 Data = jsonResult.Value 24 }); 25 } 26 27 await next.Invoke(); 28 } 29 } 30 }View Code
2、新建控制器CustomAsyncResultController
1 using Microsoft.AspNetCore.Mvc; 2 using Project6.Utility.Filters; 3 4 namespace Project6.Controllers 5 { 6 public class CustomAsyncResultController : Controller 7 { 8 public CustomAsyncResultController() 9 { 10 Console.WriteLine("控制器的构造函数被执行"); 11 } 12 13 [CustomAsyncResultFilter] 14 public IActionResult Index() 15 { 16 return Json(new 17 { 18 Id = 123, 19 Name = "net" 20 }); 21 } 22 } 23 }View Code
3、在各个方法开始处设置断点,运行/CustomAsyncResult
可以发现程序刚运行的时候会执行CustomAsyncResultFilterAttribute的构造方法,只执行一次,后面程序的执行顺序是
CustomAsyncResultController的构造方法-->
CustomAsyncResultController的Action方法-->
CustomAsyncResultFilterAttribute的OnResultExecutionAsync方法
输出结果为
{"success":true,"message":"OK","data":{"id":123,"name":"net"}}
在输出结果前,通过OnResultExecutionAsync方法,可以地结果进行修饰然后在输出。