ASP.NET MVC的過濾器筆記
過濾器概念
APS.NET MVC中(以下簡稱“MVC”)的每一個請求,都會分配給相應的控制器和對應的行為方法去處理,而在這些處理的前前後後如果想再加一些額外的邏輯處理。這時候就用到了過濾器。
1、過濾器(Filters)就是向請求處理管道中注入額外的邏輯。提供了一個簡單而優雅的方式來實現橫切關注點。
2、所謂的過濾器(Filters),MVC框架裡面的過濾器完全不同於ASP.NET平臺裡面的Request.Filters和Response.Filter物件,它們主要是實現請求和響應流的傳輸。通常我們所說的過濾器是指MVC框架裡面的過濾器。
3、過濾器可以注入一些程式碼邏輯到請求處理管道中,是基於C#的Attribute的實現。當負責呼叫Action的類ControllerActionInvoker在呼叫執行Action的時候會檢查Action上面的Attribute並檢視這些Attribute是否實現了指定的介面,以便進行額外的程式碼注入處理
過濾器分類
MVC支援的過濾器型別有四種,分別是:Authorization(授權),Action(行為),Result(結果)和Exception(異常)。如下表,
過濾器型別 | 介面 | 描述 |
Authorization | IAuthorizationFilter | 此型別(或過濾器)用於限制進入控制器或控制器的某個行為方法 |
Exception | IExceptionFilter | 用於指定一個行為,這個被指定的行為處理某個行為方法或某個控制器裡面丟擲的異常 |
Action | IActionFilter | 用於進入行為之前或之後的處理 |
Result | IResultFilter | 用於返回結果的之前或之後的處理 |
但是預設實現它們的過濾器只有三種,分別是Authorize(授權),ActionFilter,HandleError(錯誤處理);各種資訊如下表所示
過濾器 | 類名 | 實現介面 | 描述 |
ActionFilter | AuthorizeAttribute | IAuthorizationFilter | 此型別(或過濾器)用於限制進入控制器或控制器的某個行為方法 |
HandleError | HandleErrorAttribute | IExceptionFilter | 用於指定一個行為,這個被指定的行為處理某個行為方法或某個控制器裡面丟擲的異常 |
自定義 | ActionFilterAttribute | IActionFilter和IResultFilter | 用於進入行為之前或之後的處理或返回結果的之前或之後的處理 |