ASP .NET Core MVC Controller期間會執行的事
Filter
Authorization Filter
前面提到了MVC的生命週期
也說明了Model的部分
今天要來整理一下Controller
也要在提到生命週期裡面Controller會處理的事情
首先來看到一張之前在提到生命週期的流程圖
藍色的部分是Controller所負責的內容
包含了Controller Initialization 以及 Action method
紅色部分(Controller Initialization)則是本篇要討論的重點
在進入到Controller前
需要提一下Filter
Filter 是在Controller進入到每個動作的前後
分別做的一些額外的處理
可能是驗證授權的機制或是一些基本驗證等等
ASP .NET MVC本來有的Filter機制
在 .NET Core也沿用下來
主要依序有:
搭配request進來到Controller並回傳的行為
整個流程如下
另外要注意的是
Action filter,Result filter都是雙向的
在進入action 和 Result和離開後都會在執行一次
Result filter結束後會再回到Middleware filter 以及Resource filter
關於Middleware filter, 比較少人討論到,但在微軟官網是有提到這個filter的,因為叫做Middleware filter實在很容易跟最前面的Middleware搞混
(資料來源:微軟官網)
這邊要討論的是再進來Controller的一開始
也就是紅色框框的範圍
會經過的三個Filters為
Authorization Filter
Resource filter
Middleware filter
主要是處理request進來的一些驗證
舉個例子今天網站臨時要維護中
要禁止所有的user登入進來
這個情境就可以使用Authorization去處理
首先先在專案上新增一個提醒頁面
這邊就純粹是一個簡單的HTML檔案
"PageSwtiches": {
"stopview": true
}
新增Filter
新增一個叫做DoNotViewAuthFilter的Filter
繼承了IAuthorizationFilter這個介面
並實作了OnAuthorization這個方法
主要的邏輯就是寫在這個方法裡面去控制
在這邊取出設定檔得值,並決定要顯示的頁面
在controller使用Filter
在ASP .NET Core 使用Filter的方式為
[TypeFilter(typeof(XXXXXFilter))]
Filter也可以針對某個action或使整個Controller
這裡直接先加到整個Controller
接下來的
Resource filter以及Middleware filter
明天會再接續這個部分
參考資料
https://code-maze.com/filters-in-asp-net-core-mvc/
https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-3.1
https://ithelp.ithome.com.tw/articles/10195407