您现在的位置是:网站首页> 编程资料编程资料
.Net Core Aop之IResourceFilter的具体使用_实用技巧_
2023-05-24
357人已围观
简介 .Net Core Aop之IResourceFilter的具体使用_实用技巧_
一、简介
在.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 = 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; // 这句话的执行就是去执行控制器的构造函数+Action Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync After"); } } } 四、总结
不管是同步还是异步,他们的执行顺序其实都是一样的,下面是同步和异步分别打印的日志记录:
1、同步日志

2、异步日志

到此这篇关于.Net Core Aop之IResourceFilter的具体使用的文章就介绍到这了,更多相关.Net Core Aop IResourceFilter内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
相关内容
- .NET避免装箱的方法_实用技巧_
- 使用最小 WEB API 实现文件上传的Swagger支持_实用技巧_
- 使用最小 WEB API 实现文件上传会遇到的坑_实用技巧_
- Entity Framework管理一对一实体关系_实用技巧_
- Entity Framework实体拆分多个表_实用技巧_
- .NetCore手动封装日志组件的实现代码_实用技巧_
- Entity Framework使用Fluent API配置案例_实用技巧_
- Entity Framework实现数据迁移_实用技巧_
- VS2019中.NET如何实现打日志功能_实用技巧_
- Entity Framework使用配置伙伴创建数据库_实用技巧_
