.Net?Core?Aop之IResourceFilter的具體使用
一、簡介
在.net core 中Filter分為以下六大類:
- 1、AuthorizeAttribute(權(quán)限驗證)
- 2、IResourceFilter(資源緩存)
- 3、IActionFilter(執(zhí)行方法前后的記錄)
- 4、IResultFilter(結(jié)果生成前后擴展)
- 5、IAlwaysRun(響應(yīng)結(jié)果的補充)
- 6、IExceptionFilter(異常處理)
二、IResourceFilter(同步資源緩存)
1、定義Filter
public class CustomerResourceFilterAttribute : Attribute, IResourceFilter { private static Dictionary<string,object> cacheDic=new Dictionary<string, object>(); 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<HomeController> _logger; public HomeController(ILogger<HomeController> logger) { _logger = logger; Console.WriteLine($"執(zhí)行 {this.GetType().Name} 構(gòu)造函數(shù)"); } [CustomerResourceFilter] public IActionResult Index() { ViewBag.Data = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); return View(); } }
3、前端頁面代碼
@{ ViewData["Title"] = "Home Page"; } <h3>來自于控制器的結(jié)果:@ViewBag.Data</h3> <h3>來自于頁面的結(jié)果:@DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")</h3>
4、頁面效果
按F5可以看到頁面值的變化效果,"來自于控制器的結(jié)果"的值會一直不變,“來自于頁面的結(jié)果”隨著頁面刷新,值會一直變化
三、IAsyncResourceFilter(異步資源緩存)
public class CustomerAsyncResourceFilterAttribute : Attribute, IAsyncResourceFilter { private static Dictionary<string, object> cacheDic = new Dictionary<string, object>(); 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; // 這句話的執(zhí)行就是去執(zhí)行控制器的構(gòu)造函數(shù)+Action Console.WriteLine("CustomerResourceFilterAttribute.OnResourceExecutionAsync After"); } } }
四、總結(jié)
不管是同步還是異步,他們的執(zhí)行順序其實都是一樣的,下面是同步和異步分別打印的日志記錄:
1、同步日志
2、異步日志
到此這篇關(guān)于.Net Core Aop之IResourceFilter的具體使用的文章就介紹到這了,更多相關(guān).Net Core Aop IResourceFilter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Entity Framework使用Code First模式管理視圖
本文詳細講解了Entity Framework使用Code First模式管理視圖的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03關(guān)于服務(wù)器或虛擬主機不支持 AjaxPro 的問題終極解決方法
asp.net的網(wǎng)站,訪問時提示不支持 AjaxPro,那就因為誤刪的映射導(dǎo)致,可以通過下面的方法解決2012-03-03Asp.Net二級域名共享Forms身份驗證、下載站/圖片站的授權(quán)訪問控制
我們平時一般在做圖片或者文件下載權(quán)限控制的時候基本都是控制到下載頁面的,當(dāng)你的下載地址暴露后,瀏覽者就直接可以通過文件地址進行下載了,這時候也就出現(xiàn)了我們常說的盜鏈2012-02-02ASP.NET對HTML頁面元素進行權(quán)限控制(三)
界面每個元素的權(quán)限也是需要控制的。比如一個查詢用戶的界面里面有查詢用戶按鈕,添加用戶按鈕,刪除用戶按鈕,不同的角色我們得分配不同的權(quán)限2013-12-12ASP.NET設(shè)計網(wǎng)絡(luò)硬盤之兩重要類代碼
要進行“網(wǎng)絡(luò)硬盤”功能設(shè)計,首先要熟悉.NET中處理文件和文件夾的操作。File類和Directory類是其中最主要的兩個類。了解它們將對后面功能的實現(xiàn)提供很大的便利2012-10-10