程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET MVC中你必須知道的13個擴展點

ASP.NET MVC中你必須知道的13個擴展點

編輯:關於ASP.NET

ScottGu在其最新的博文中推薦了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,該文章為我們簡單介紹了ASP.NET MVC中的13個擴展點。Keyvan Nayyeri(與Simone合著了Beginning ASP.NET MVC 1.0一書)又陸續發表了一些文章,對這13個擴展點分別進行深入的討論。我將在 以後的隨筆中對這些文章逐一進行翻譯,希望能對大家有所幫助。

ASP.NET MVC設計的主要原則之一是可擴展性。處理管線(processing pipeline)上的所有(或大多數)東西都是可替換的。因此,如果您不喜歡ASP.NET MVC所使用的約定(或缺乏某些約定),您可以創建自己的服務來支持您的約定, 並將其注入到主管線中。

在本文中,我們將從管線開始直到視圖呈現, 逐一向您展示每個ASP.NET MVC開發者都必須了解13個擴展點。

1.RouteConstraint

通常情況下你可以使用正則表達式對url參數 進行約束,但如果您的約束不僅僅取決於單一參數,您可以實現 IRouteConstrains的方法,並在其中添加你的驗證邏輯。

比如對日期的 驗證,url中可能會包含年、月、日,而你需要驗證這三者是否可以組合成一個 有效的日期。

2.RouteHandler

RouteHandler是在路由選擇之後進 行處理的組件,它並不僅僅針對ASP.NET MVC。顯然,如果您改變了 RouteHandler,那麼對請求的處理將不再使用ASP.NET MVC,但這在您使用其他 HttpHandler或經典的WebForm進行路由處理時卻是非常有用的。

3.ControllerFactory

ControllerFactory是基於路由的組件,它 選擇正確的controller並對其實例化。default factory會查找實現了 IController並且以Controller結尾的類,然後通過反射使用無參構造函數進行 實例化。

但如果您希望使用依賴注入,就不能再使用default factory, 而必須使用支持IoC的controller factory。MvcContrib和Ninject Controller Factory都包含支持IoC容器的controller factory。

4.ActionInvoker

ActionInvoker顧名思義是負責調用(invoke) action的。默認的action invoker通過方法名、action名或其他可能的selector attribute來查找action,然後調用action方法以及定義的filter,最終執行得 到action result。

你會發現大部分執行管線存在於 ControllerActionInvoker類的邏輯之中。因此,如果希望改變這些約定,如 action方法的選擇邏輯、http參數映射到action參數的方式、選擇和執行filter 的方式等,您需要擴展該類並重寫需要修改的方法。

可以參閱 NinjectActionInvoker I developed to allow injection of dependencies inside filters。

5.ActionMethodSelectorAttribute

使用默認 的action invoker時,action的選擇是基於名稱的。您也可以實現自己的Method Selector以改善對於action的選擇。在框架中已經包含了AcceptVerbs特性,它 允許您指定使用哪一個HTTP Verb來處理action的響應。

例如,您也許會 希望基於浏覽器所支持的語言或浏覽器類型(如移動設備的浏覽器或桌面浏覽器) 來進行action的選取。

6.AuthorizationFilter

這種過濾器是在 action執行之前執行的,用來確保請求是有效的。

框架中已經包含了一 些autorization過濾器,最有名的莫過於Authorize特性,它用來檢查當前用戶 是否允許執行該action。另一個是用來阻止CSRF攻擊的 ValidateAntiForgeryToken。如果您希望實現自己的authorization,那麼必須 實現接口。例如,日期中的小時。

7.ActionFilter

Action Filters在action執行前後執行。OutputCache過濾器是幾個核心過濾器之一。這 可能是您最有可能使用的擴展點,並且在我看來,controller只關心它的主要工 作,而view所需要的所有其他數據都必須從action過濾器內部獲取,這樣的實現 對於一個組織良好的view來說,是十分關鍵的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved