當前位置:編程學習大全網 - 源碼下載 - 13 ASP.NET MVC擴展點。

13 ASP.NET MVC擴展點。

ASP的主要原則之壹。NET MVC設計是可擴展處理管道上的所有(或大部分)東西都是可替換的,所以如果妳不喜歡ASP使用的約定。NET MVC(或者缺少壹些約定),妳可以創建自己的服務來支持妳的約定,並註入到主管道中。

在本文中,我們將向您逐壹展示從管道到視圖演示,每個ASP NET MVC開發人員都必須了解兩個擴展點。

ASP.NET MVC擴展的路由約束

通常,您可以使用正則表達式來約束url參數,但是如果您的約束依賴於多個參數,您可以實現IRouteConstrains方法並向其中添加驗證邏輯。

例如,日期驗證的url可能包含年、月和日,您需要驗證這三者是否可以組合成壹個有效的日期。

ASP NET MVC擴展的RouteHandler

RouteHandler是壹個在路由之後進行處理的組件,它並不僅僅是針對ASP NET MVC的。顯然,如果更改RouteHandler,ASP NET MVC將不再用於處理請求,但當您使用其他HttpHandler或經典WebForm進行路由時,它非常有用。

ASP NET MVC擴展的ControllerFactory

ControllerFactory是壹個基於路由的組件。它選擇正確的控制器並實例化它。默認工廠將找到實現IController並以Controller結束的類,然後使用無參數構造函數通過反射將其實例化。

但是,如果要使用依賴註入,就不能再使用默認工廠,而必須使用支持IoC的控制器工廠。MVC Contib和Ninject控制器工廠都包含支持IoC容器的Controller Factory。

ASP NET MVC擴展的ActionInvoker

顧名思義,Action invoker是負責調用動作的默認ActionInvoker。它通過方法名ActionName或者其他可能的選擇器屬性尋找動作,然後調用動作方法和定義的過濾器,最後執行它得到動作結果。

妳會發現大多數執行管道都存在於ControllerActionInvoker類的邏輯中,所以如果妳想改變這些約定,比如動作方法的選擇,邏輯參數映射到動作參數的方式,filter的選擇和執行方式,妳需要擴展類,重寫需要修改的方法。

妳可以參考我開發的ninjectioninvoker,它允許在過濾器內部註入依賴關系。

ASP NET MVC擴展的ActionMethodSelectorAttribute

當使用默認的動作調用程序時,動作的選擇是基於名稱的。您還可以實現自己的方法選擇器來改進操作的選擇。AcceptVerbs特性已經包含在框架中,它允許您指定使用哪個HTTP動詞來處理動作的響應。

例如,您可能希望根據瀏覽器支持的語言或瀏覽器類型來選擇操作,例如移動設備的瀏覽器或桌面瀏覽器。

ASP NET MVC擴展的AuthorizationFilter

該過濾器在操作執行之前執行,以確保請求有效。

該框架已經包含了壹些自同構過濾器,其中最著名的是Authorize特性,用於檢查當前用戶是否被允許執行該操作,另壹個是ValidateAntiFeryToken,用於防止CSRF攻擊。如果要實現自己的自動授權,必須實現日期中的小時等接口。

ASP NET MVC擴展的ActionFilter

動作過濾器在動作執行前後執行OutputCache過濾器。它是幾個核心過濾器之壹,可能是您最有可能使用的擴展點。在我看來,控制器只關心它的主要工作,視圖需要的所有其他數據都必須從動作過濾器內部獲得。這樣的實現對於組織良好的視圖來說非常重要。

ASP NET MVC擴展的模型綁定器

默認的模型綁定器使用參數名將HTTP參數映射到動作方法參數。例如,參數user Address City將映射到方法參數user的Address屬性的City屬性。DefaultModelbinder也適用於數組和其他列表類型。

此外,例如,您可能希望從數據庫中進行檢索,並根據人員的id將其直接轉換為人員對象。Timothy Khouri(網名SingingEels)在他的文章《ASP NET MVC中的模型綁定器》中更好地闡述了這種方法。他的代碼是基於Preview的,但是它的概念是壹樣的。

ASP NET MVC擴展的ControllerBase

所有控制器都從基類控制器繼承。這是壹個很好的方法來封裝他們自己的邏輯和約定,並創建他們自己的父類,以便所有的控制器都繼承這個類。

ASP NET MVC擴展的結果過濾器

與ActionFilter類似,ResultFilters在ActionResult之前和之後執行OutputCache篩選器,這也可以用作ResultFilter的示例。這種過濾器的另壹個例子是日誌。如果希望在頁面返回給用戶時進行記錄,可以編寫壹個自定義的RenderFilter,在執行ActionResult後進行記錄。

ASP NET MVC擴展的ActionResult

ASP NET MVC提供了許多結果來呈現視圖的JSON純文本文件並將其重定向到其他動作。如果需要其他類型的結果,可以自定義ActionResult並實現ExecuteResult方法。例如,如果您想要發送壹個PDF文件作為結果,您需要使用壹個PDF庫來編寫壹個可以生成PDF的ActionResult。

ASP NET MVC擴展的視圖引擎

您可能不需要編寫自己的視圖引擎,但是您可以考慮使用其他引擎來代替默認的WebForm視圖引擎。在我看來,最有趣的引擎是Spark。

如果妳真的想自己寫視圖引擎,可以看看Brad Wilson的文章:局部渲染& amp;ASP NET MVC中的視圖引擎

ASP NET MVC擴展的HtmlHelper

視圖必須非常簡單和整潔。它們只能包含標簽和調用HtmlHelper的輔助方法。視圖不能包含任何代碼生成,所以輔助方法必須非常方便,以便您可以從視圖中提取代碼,並將其放入可測試的環境中。就像Rob Conery說的,如果有if,構造壹個輔助方法。

什麽是HtmlHelper幫助器方法?實際上是HtmlHelper類的擴展方法,這是唯壹的要求

您可以從Rob的文章避免標簽湯中了解為什麽HtmlHelper是封裝視圖中代碼的好方法。

您應該在應用程序中使用哪壹個?

正如您所猜測的,並不是所有的應用程序都需要擴展上述擴展點。ActionFilter和HtmlHelper是所有應用程序中最有可能的擴展。另外,妳很可能會使用別人寫的擴展,比如ControllerFactory使用IoC容器或者ViewEngine來擺脫WebForm。

Lishi Xinzhi/Article/program/net/201311/13180

  • 上一篇:Exception in thread "main" java.lang.NoClassDefFoundError: shoufei (wrong name: Shoufei)
  • 下一篇:2021杭州千島湖暑期遊玩優惠
  • copyright 2024編程學習大全網