今天在項目(https://github.com/AjuPrince/Aju.Carefree)作登錄權限時,用到了Filter,現將Filer的使用作如下記錄。html
Filter俗稱過濾器,它的做用是在Action方法執行先後作一些處理。它在Mvc Action 管道中運行,因此也能夠叫作過濾器管道。git
Authorization Filter -> Resource Filter -> Action Filter -> Exception Filter -> Result Filtergithub
在.Net Core MVC 中新增了異步過濾器,若是提供了異步和同步過濾器,那麼將執行異步過濾器,同步過濾器將不會執行。 mvc
(圖片來自 John Wu 的博客)異步
Authorization Filter 是這幾種Filter中優先級最高的,一般用於驗證請求的合法性,俗稱 受權過濾器。async
Resource Filter 是第二個被執行的,Model Binding以前執行,一般用於對Model加工處理,俗稱 資源過濾器ide
Action Filter 這個過濾器是最經常使用到的過濾器,在調用Action方法先後執行,在Model Binding以後執行,在使用上沒什麼特別注意的,俗稱 方法過濾器學習
Exception Filter 經常用於應用程序執行異常是記錄日誌spa
Result Filter 當Action 執行完成後,最終會執行的Filter,經常用於處理 Action 執行結果3d
Filter 的註冊有兩種方式,一種是全局註冊,另外一種的區域註冊
public class HandleLoginAsyncAttribute : IAsyncActionFilter { public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { context.HttpContext.Session.TryGetValue("Aju_Prince_OperatorProvider_20190708", out var result); if (result == null) { context.Result = new RedirectResult("/Login/Index"); return; } await next.Invoke(); } }
參考:
(本人堅信:學習是由淺到深的過程)
不喜勿噴!謝謝!
GitHub地址: https://github.com/AjuPrince/Aju.Carefree