【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 Dictionary CacheDictionary = 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页面显示情况
大家有问题可以与个人发邮件,收到邮件会第一时间回复大家!
自勉:“锲而不舍,金石可镂”