小白開學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定義
-
註冊
參考:
ASP.NET Core Filters
ASP.NET Core 教學 – Filters
朋友會在“發現-看一看”看到你“在看”的內容