小白開學Asp.Net Core《五》 —— 使用.Net Core MVC Filter 一、簡介 今天在項目(https://github.com/AjuPrince/Aju.Carefree)做登陸許可權時,用到了Filter,現將Filer的使用做以下記錄。 二、Filter 簡介 Filte ...
小白開學Asp.Net Core《五》
—— 使用.Net Core MVC Filter
一、簡介
今天在項目(https://github.com/AjuPrince/Aju.Carefree)做登陸許可權時,用到了Filter,現將Filer的使用做以下記錄。
二、Filter 簡介
Filter俗稱過濾器,它的作用是在Action方法執行前後做一些處理。它在Mvc Action 管道中運行,所以也可以叫做過濾器管道。
三、Filter的執行順序
Authorization Filter -> Resource Filter -> Action Filter -> Exception Filter -> Result Filter
在.Net Core MVC 中新增了非同步過濾器,如果提供了非同步和同步過濾器,那麼將執行非同步過濾器,同步過濾器將不會執行。
(圖片來自 John Wu 的博客)
-
Authorization Filter
Authorization Filter 是這幾種Filter中優先順序最高的,通常用於驗證請求的合法性,俗稱 授權過濾器。
-
Resource Filter
Resource Filter 是第二個被執行的,Model Binding之前執行,通常用於對Model加工處理,俗稱 資源過濾器
-
Action Filter
Action Filter 這個過濾器是最常用到的過濾器,在調用Action方法前後執行,在Model Binding之後執行,在使用上沒什麼特別註意的,俗稱 方法過濾器
-
Exception Filter
Exception Filter 常常用於應用程式執行異常是記錄日誌
-
Result Filter
Result Filter 當Action 執行完成後,最終會執行的Filter,常常用於處理 Action 執行結果
四、Filter類型在Filter管道中的交互方式
五、Filter 的註冊
Filter 的註冊有兩種方式,一種是全局註冊,另一種的區域註冊
- 全局註冊是在Startup.cs 中進行註冊。註冊後用於所有的Request
- 區域註冊是在Controller或者Action 上面加上[TypeFilter(type)]
六、項目案例(區域)
-
定義ActionFilter:
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(); } }
-
使用:
七、項目案例(全局)
-
Filter定義
-
註冊
參考:
(本人堅信:學習是由淺到深的過程)
不喜勿噴!謝謝!
GitHub地址: https://github.com/AjuPrince/Aju.Carefree