.Net|.Net Core Aop之IResourceFilter的具体使用
目录
- 一、简介
- 二、IResourceFilter(同步资源缓存)
- 1、定义Filter
- 三、IAsyncResourceFilter(异步资源缓存)
- 四、总结
一、简介 在.net core 中Filter分为以下六大类:
- 1、AuthorizeAttribute(权限验证)
- 2、IResourceFilter(资源缓存)
- 3、IActionFilter(执行方法前后的记录)
- 4、IResultFilter(结果生成前后扩展)
- 5、IAlwaysRun(响应结果的补充)
- 6、IExceptionFilter(异常处理)
二、IResourceFilter(同步资源缓存)
1、定义Filter
public class CustomerResourceFilterAttribute : Attribute, IResourceFilter{private static Dictionary cacheDic=new Dictionary(); public void OnResourceExecuting(ResourceExecutingContext context){var path=context.HttpContext.Request.Path; if (cacheDic.ContainsKey(path)){context.Result = (IActionResult)cacheDic[path]; }Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuting"); }public void OnResourceExecuted(ResourceExecutedContext context){var path = context.HttpContext.Request.Path; cacheDic[path] = context.Result; Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecuted"); }}
2、使用Filter
public class HomeController : Controller{private readonly ILogger _logger; public HomeController(ILogger logger){_logger = logger; Console.WriteLine($"执行 {this.GetType().Name} 构造函数"); }[CustomerResourceFilter]public IActionResult Index(){ViewBag.Data = https://www.it610.com/article/DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); return View(); }}
3、前端页面代码
@{ViewData["Title"] = "Home Page"; }来自于控制器的结果:@ViewBag.Data
来自于页面的结果:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
4、页面效果
按F5可以看到页面值的变化效果,"来自于控制器的结果"的值会一直不变,“来自于页面的结果”随着页面刷新,值会一直变化
文章图片
三、IAsyncResourceFilter(异步资源缓存)
public class CustomerAsyncResourceFilterAttribute : Attribute, IAsyncResourceFilter{private static Dictionary cacheDic = new Dictionary(); public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next){Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync Before"); var path = context.HttpContext.Request.Path; if (cacheDic.ContainsKey(path)){context.Result = (IActionResult)cacheDic[path]; }else{ResourceExecutedContext resource =await next.Invoke(); cacheDic[path] = resource.Result; // 这句话的执行就是去执行控制器的构造函数+ActionConsole.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync After"); }}}
四、总结 不管是同步还是异步,他们的执行顺序其实都是一样的,下面是同步和异步分别打印的日志记录:
1、同步日志
文章图片
2、异步日志
文章图片
【.Net|.Net Core Aop之IResourceFilter的具体使用】 到此这篇关于.Net Core Aop之IResourceFilter的具体使用的文章就介绍到这了,更多相关.Net Core Aop IResourceFilter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- .NET避免装箱的方法
- java|自学java(2)
- Spring|SpringBoot整合Redis实现缓存(自动缓存 + 手动aop缓存)
- 通过Dapr实现一个简单的基于.net的微服务电商系统(二十)——Saga框架实现思路分享
- Asp.Net|Asp.Net Core: Swagger 与 Identity Server 4
- .NET|.NET Core使用flyfire.CustomSerialPort实现Windows/Linux跨平台串口通讯
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十九)——分布式事务之Saga模式
- Spring|Spring AOP之原理解析(三)
- 由浅入深理解AOP
- Spring|Spring 框架之 AOP 原理剖析已经出炉!!!预定的童鞋可以识别下发二维码去看了