{%hackmd @themes/dracula %} # MVC 5 專案之眉眉角角 ###### tags: `Asp.Net MVC` ### Filter > <span style="color:red;">*Filter 的作用是在 Action 執行前或執行後做一些加工處理*</span> + Authorization Filter: Authorization 是五種 Filter 中優先序最高的,通常用於驗證 Request 合不合法,不合法後面就直接跳過。 + Resource Filter: Resource 是第二優先,會在 Authorization 之後,Model Binding 之前執行。通常會是需要對 Model 加工處裡才用。 + Action Filter: 最容易使用的 Filter,封包進出都會經過它,使用上沒什麼需要特別注意的。跟 Resource Filter 很類似,但並不會經過 Model Binding。 + Exception Filter: 異常處理的 Exception。 + Result Filter: 當 Action 完成後,最終會經過的 Filter。 #### 運作方式 ASP .NET Core 的每個 Request 都會先經過已註冊的 Middleware 接著才會執行 Filter,除了會依照上述的順序外,同類型的 Filter 預設都會以先進後出的方式處裡封包。 Response 在某些 Filter 並不會做處理,會值接 Bypass。Request 及 Response 的運作流程如下圖: ![](https://i.imgur.com/MBK4jZ5.png) - 黃色箭頭是正常情況流程 - 灰色箭頭是異常處理流程 參考資料:[John Wu's [鐵人賽 Day14] ASP.NET Core 2 系列 - Filters ](https://tinyurl.com/y4ghf4qm)