.Net Core AOP之IResultFilter
一、简介
在.net core 中Filter分为以下六大类:
1、AuthorizeAttribute(权限验证)
2、IResourceFilter(资源缓存)
3、IActionFilter(执行方法前后的记录)
4、IResultFilter(结果生成前后扩展)
5、IAlwaysRun(响应结果的补充)
6、IExceptionFilter(异常处理)
二、IResultFilter(同步)
1、定义Filter
public class CustomerResultFilterAttribute : Attribute, IResultFilter
{
/// <summary>
/// 在xx结果之前
/// </summary>
/// <param name="context"></param>
/// <exception cref="NotImplementedException"></exception>
public void OnResultExecuting(ResultExecutingContext context)
{ Console.WriteLine("CustomerResultFilterAttribute.OnResultExecuting"); if(context.Result is JsonResult)
{
JsonResult result= (JsonResult)context.Result; context.Result = new JsonResult(new {
Data= result.Value,
Success=true
});
}
} /// <summary>
/// 在xx结果之后
/// </summary>
/// <param name="context"></param>
/// <exception cref="NotImplementedException"></exception>
public void OnResultExecuted(ResultExecutedContext context)
{
Console.WriteLine("CustomerResultFilterAttribute.OnResultExecuted");
}
}
2、使用Filter
public class Home2Controller : Controller
{
private readonly ILogger<Home2Controller> _logger; public Home2Controller(ILogger<Home2Controller> logger)
{
_logger = logger;
Console.WriteLine($"执行 {this.GetType().Name} 构造函数");
} [CustomerResultFilter] // 当Filter中有构造函数时,需这样调用:[TypeFilter(typeof(CustomerResultFilterAttribute))]
public IActionResult Index()
{
Console.WriteLine($"执行 Index 方法"); return Json(new { id="11",name="heheh"}); }
}

三、IAsyncResultFilter(异步)
public class CustomerAsyncResultFilterAttribute : Attribute, IAsyncResultFilter
{
public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
{ if (context.Result is JsonResult)
{
JsonResult result = (JsonResult)context.Result; context.Result = new JsonResult(new
{
Data = result.Value,
Success = true
});
}
await next.Invoke(); // 这里及时去渲染结果去了 }
}

四、总结
作用:适用于统一返回Action的结果格式,JSON格式的统一处理

执行顺序
1、先执行Action 方法结束
2、CustomerResultFilterAttribute.OnResultExecuting
3、渲染试图或返回Action结果
4、CustomerResultFilterAttribute.OnResultExecuted
.Net Core AOP之IResultFilter的更多相关文章
- Asp.net Core AOP实现(采用Autofac)
引用正确的库来实现AOP 新的.NET Core是基于.NET Standard的..所以我们在引用库的时候特别要注意相关的兼容问题. 在传统的ASP.NET中,使用过Autofac来进行AOP操作的 ...
- .Net Core Aop之IResourceFilter
一.简介 在.net core 中Filter分为一下六大类: 1.AuthorizeAttribute(权限验证) 2.IResourceFilter(资源缓存) 3.IActionFilter(执 ...
- .Net Core Aop之IActionFilter
一.简介 在.net core 中Filter分为以下六大类: 1.AuthorizeAttribute(权限验证) 2.IResourceFilter(资源缓存) 3.IActionFilter(执 ...
- .Net Core AOP之AuthorizeAttribute
一.简介 在.net core 中Filter分为以下六大类: 1.AuthorizeAttribute(权限验证) 2.IResourceFilter(资源缓存) 3.IActionFilter(执 ...
- .Net Core AOP之IExceptionFilter
一.简介 在.net core 中Filter分为以下六大类: 1.AuthorizeAttribute(权限验证) 2.IResourceFilter(资源缓存) 3.IActionFilter(执 ...
- .net core AOP之Filter
当我们进行项目开发时,往往在开发过程中需要临时加入一些常用功能性代码,如身份验证.日志记录.异常获取等功能.如果每个方法中都加入这些功能性代码的话,无疑使项目显得过于臃肿,代码繁杂.这时候就要加入过滤 ...
- 面向复杂应用,Node.js中的IoC容器 -- Rockerjs/core
Rockerjs Core 项目地址 项目主页 基于 TypeScript 和注解的轻量级IoC容器,提供了依赖注入.面向切面编程及异常处理等功能.Rockerjs Core可在任意工程中引入,是一个 ...
- Spring AOP 中 advice 的四种类型 before after throwing advice around
spring AOP(Aspect-oriented programming) 是用于切面编程,简单的来说:AOP相当于一个拦截器,去拦截一些处理,例如:当一个方法执行的时候,Spring 能够拦截 ...
- 学习ASP.NET Core(10)-全局日志与xUnit系统测试
上一篇我们介绍了数据塑形,HATEOAS和内容协商,并在制器方法中完成了对应功能的添加:本章我们将介绍日志和测试相关的概念,并添加对应的功能 一.全局日志 在第一章介绍项目结构时,有提到.NET Co ...
随机推荐
- 【Java】Collections
文章目录 Collections reverse(List) shuffle(List) sort(List) sort(List,Comparator) swap(List,int, int) Ob ...
- 开发 IDEA Plugin 引入探针,基于字节码插桩获取执行SQL
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 片面了! 一月三舟,托尔斯泰说:"多么伟大的作家,也不过就是在书写自己的片 ...
- NPOI导出例子
public static string ExportAOrder(ExportData data) { var cellHeard = new Dictionary<string, strin ...
- java匿名内部类概述
1 package face_09; 2 /* 3 * 匿名内部类.就是内部类的简写格式. 4 * 必须有前提: 5 * 内部类必须继承或者实现一个外部类或者接口. 6 * 匿名内部类:其实就是一个匿 ...
- java代码实现调用短信接口,发送短信验证。
一.代码示例 package com.aaa.zxf.login; import org.apache.commons.httpclient.HttpClient; import org.apache ...
- APC 篇——总结与提升
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- 业务4P分析实践
原创不易,求分享.求一键三连 前言 假期继续思考BI未来的方向,其实常规的BI规划也不是不能出,比如公司BI看板建设.数据指标体系建设.业务线UE模型数据监控等,但这种不会超出预期的东西自然也能算技术 ...
- 【XR-2】伤痕
不难发现,直接漫无目的地构造不是一个好的选择,因为我们并不知道选择四座城市方案的上界是什么,因此下面可以来先分析一下这个方案的上界. 首先可以考虑这使得这四个点的导出子图是强连通的方案数,但是经过尝试 ...
- JAVA多线程学习十五 - 阻塞队列应用
一.类相关属性 接口BlockingQueue<E>定义: public interface BlockingQueue<E> extends Queue<E> { ...
- 用curl发起https请求
使用curl发起https请求 使用curl如果想发起的https请求正常的话有2种做法: 方法一.设定为不验证证书和host. 在执行curl_exec()之前.设置option $ch = cur ...