.Net Core IResourceFilter简单使用
IResourceFilter用于资源管理的一个过滤器,常用于缓存
废话不多说,直接通过小案列体会它的强大
1.我们需要使用到.Net Core自带的缓存这里我用到了IMemoryCache,一定要注册为单列,要不你每次的缓存都不一致,失去了缓存的意义~
builder.Services.AddSingleton<IMemoryCache, MemoryCache>();
2.创建一个class继承IResourceFilter的class 并实现它的两个方法
using CloudinaryDotNet.Actions; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json; namespace WebApplication1.Filters { public class CtmResourceFilterAttribute : Attribute, IResourceFilter { private readonly IMemoryCache _cache; public CtmResourceFilterAttribute(IMemoryCache cache) { _cache = cache ?? throw new ArgumentNullException(nameof(cache)); } public void OnResourceExecuted(ResourceExecutedContext context) { var path = context.HttpContext.Request.Path.ToString(); var value = (context.Result as ObjectResult)?.Value; _cache.Set(path, value); } public void OnResourceExecuting(ResourceExecutingContext context) { var path = context.HttpContext.Request.Path.ToString(); if (_cache.TryGetValue(path, out object values)) { context.Result = new ObjectResult(values); } } } }
OnResourceExecuted:当在第一次资源请求时发生调用
我们把,每一个Action存为Key值把获取的值存为value
OnResourceExecuting:在第二次请求,乃至若干次后执行调用 拿到当前请求的Action地址最为Key去缓存中找然会返回即可
下面是测试阶段:
第一次请求会执行该方法进行存储操作
![]()
第二次请求时,读取缓存,进行短路操作
![]()
以上就是IResourceFilter基础用法,该文章作为自己学习笔记,大神勿喷!
三更灯火五更鸡,正是男儿读书时!



浙公网安备 33010602011771号