【VS2022+ASP.Net Core+.net6】资源过滤器
【资源过滤器】
本节主要讲解资源过滤器(IResourceFilter、IAsyncResourceFilter)的原理和使用
原理:在html访问项目资源时,需要先访问我们的资源过滤器,方可访问对应的Controller/Action,最后回到资源过滤器中才返回给客户。
1、IResourceFilter
1.1)建资源过滤器类 ResourceCacheFilter
引用:using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters;
////// 资源过滤器(主要用于资源缓存) /// public class ResourceCacheFilter : Attribute, IResourceFilter { private static DictionaryCacheDictionary = new Dictionary (); /// /// 资源访问前调用 /// /// ///public void OnResourceExecuting(ResourceExecutingContext context) { var key = context.HttpContext.Request.Path; if (CacheDictionary.ContainsKey(key)) { context.Result = (IActionResult)CacheDictionary[key]; } Console.WriteLine("资源访问前调用...."); } /// /// 资源访问后调用 /// /// ///public void OnResourceExecuted(ResourceExecutedContext context) { CacheDictionary[context.HttpContext.Request.Path] = context.Result; Console.WriteLine("资源访问后调用...."); } }
1.2)对应的项目资源添加属性
[ResourceCacheFilter]
[ResourceCacheFilter] public IActionResult TestResourceFilter() { ViewBag.Date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); return View(); }
1.3)View页面显示情况
2、IAsyncResourceFilter
2.1)建资源过滤器类 ResourceAsyncCacheFilter
引用:using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters;
public class ResourceAsyncCacheFilter : Attribute, IAsyncResourceFilter { private static DictionaryCacheDictionary = new Dictionary (); /// /// 异步访问资源 /// /// /// ////// public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) { var key = context.HttpContext.Request.Path; Console.WriteLine("资源异步前访问...."); if (CacheDictionary.ContainsKey(key)) { context.Result = (IActionResult)CacheDictionary[key]; } else { ResourceExecutedContext source = await next.Invoke(); CacheDictionary[key] = source.Result; } Console.WriteLine("资源异步后访问...."); } }
2.2)对应的项目资源添加属性[ResourceAsyncCacheFilter]
[ResourceAsyncCacheFilter] public IActionResult TestResourceFilter() { ViewBag.Date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); return View(); }
2.3)View页面显示情况
大家有问题可以与个人发邮件,收到邮件会第一时间回复大家!
自勉:“锲而不舍,金石可镂”