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输出结果前执行。可以用来对输出结果进行修饰重构。

浙公网安备 33010602011771号