MVC-ActionFilter

  最近在寫公司專案時,對MVC中的ActionFilter有了進一步的理解,索性趁著連假把這些東西記錄下來。

 

很多朋友會覺得很奇怪,為什麼加個HttpPost,方法的動詞就真的變成Post了?

這個看似加了就會產生超能力的標籤是怎麼做出來的呢?

其實這些標籤是在MVC的生命週期之中實作的。

舉個例子來說,當Request送到ASP.NET MVC時,在MVC的生命週期之中,建立Controller前,會透過反射去尋找Controller上方是否有掛繼承自HttpMethodAttribute的HttpPost,若是有的話則取出並執行,而HttpMethodAttribute就是繼承Attribute而來的。

因此所有要提供外部程式使用的程式碼,都是必須繼承自Attribute而來的衍伸類別,而在MVC之中提供給框架叫用的Attribute則是有Route、HTTP動詞、ActionFilter等。

這裡ActionFilter提供了幾個方法

1.OnActionExecuted:在Action執行之前

2.OnActionExecuting:在Action執行之後

3.OnResultExecuted:在得到結果之前

4.OnResultExecuting:在得到結果之後

都會傳入context的變數,讓你可以針對當前Request進行操作,例如要紀錄Log、權限過濾、取得當前Request的資料等動作,都可以透過這個ActionFilter來操作達到目標。

 

除了ActionFilter之外,MVC的生命週期之中還有其他可以使用的Filter

1.Authentication Filter 驗證過濾器

2.Authorization Filter 授權過濾器

3.Result Filter 結果過濾器

4.Exception Filter 例外過濾器

有了這五個過濾器之後,MVC的資料控制流程就可以在外部實做,並且在程式碼之中加掛即可獲得超能力,讓MVC的程式碼變得更乾淨漂亮摟


LINE討論群FB討論區

歡迎您的加入,讓這個社群更加美好!

聯絡方式:
FaceBook
E-Mail