结果过滤器—MVC项目中结果过滤器(Result Filter)使用
|
一、什么是结果过滤器?
结果过滤器(ResultFilter),是对执行的Action结果进行处理的一种AOP思想,适用于任何需要直接环绕 View 或格式化处理的逻辑。结果过滤器可以替换或更改 Action 结果。在 IActionResult 执行的前后执行,使用它能够控制Action的执行结果,比如:格式化结果等。需要注意的是,它只有在Action方法成功执行完成后才会运行。 一般项目中很少使用。
执行顺序:
1、执行控制器中的构造函数,实例化控制器
2、执行具体的Action方法
3、执行ResultFilter.OnResultExecuting方法
4、渲染视图或处理结果
5、执行ResultFilter.OnResultExecuted方法
二、结果过滤器实现
结果过滤器定义:
异结果过滤器实现了 IAsyncResultFilter 或 IResultFilter 接口,当实现IAsyncResultFilter重写OnResultExecutionAsync方法,实现IResultFilter,重写OnResultExecuting和OnResultExecuted方法。- /// <summary>
- /// 结果过滤器
- /// </summary>
- public class MyResultFilter : Attribute, IResultFilter
- {
- #region IResultFilter
- /// <summary>
- ///执行之前
- /// </summary>
- /// <param name="context"></param>
- public void OnResultExecuting(ResultExecutingContext context)
- {
- if (context.Result is JsonResult)
- {
- JsonResult result = (JsonResult)context.Result;
- //进行返回结果进行再次封装
- context.Result = new JsonResult(new
- {
- Success = true,
- Message = "Ok",
- Data = result.Value
- });
- }
- }
- /// <summary>
- ///执行之后
- /// </summary>
- /// <param name="context"></param>
- public void OnResultExecuted(ResultExecutedContext context)
- {
- var result = context.Result;//拿到Json结果
- Console.WriteLine("在执行之后ResultFilter.OnResultExecuted方法");
- }
- #endregion
- #region IAsyncResultFilter
- /// <summary>
- /// 执行时
- /// </summary>
- /// <param name="context"></param>
- /// <param name="next"></param>
- /// <returns></returns>
- /// <exception cref="NotImplementedException"></exception>
- public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
- {
- if (context.Result is JsonResult)
- {
- JsonResult result = (JsonResult)context.Result;
- context.Result = new JsonResult(new
- {
- Success = true,
- Message = "Ok",
- Data = result.Value
- });
- }
- await next.Invoke();
- }
- #endregion
- }
复制代码 操作级别作用范围过滤器:
在需要使用结果过滤器上的Action标注上特性标签- [MyResultFilter]//作用范围是操作过滤器级别
复制代码 添加测试Action:
- [Route("api/[controller]")]
- [ApiController]
- public class ResultFilterController : Controller
- {
- /// <summary>
- /// 测试:调用返回JSON
- /// </summary>
- /// <returns></returns>
- [HttpGet]
- [MyResultFilter]//作用范围是操作过滤器级别
- public IActionResult Test()
- {
- return Json(new
- {
- Id = 008,
- Name = "Aliang",
- Age = 28
- });
- }
- }
复制代码 三、验证:
接口访问调用:
访问地址:- https://localhost:5001/ResultFilter/Test
复制代码 调用接口时经过结果过滤器处理返回数据:
建群声明:本着技术在于分享,方便大家交流学习的初心,特此建立【编程内功修炼交流群】,热烈欢迎各位爱交流学习的程序员进群,也希望进群的大佬能不吝分享自己遇到的技术问题和学习心得
来源:https://www.cnblogs.com/wml-it/archive/2023/08/16/17633689.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|
|
|
发表于 2023-8-16 12:46:29
举报
回复
分享
|
|
|
|