一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

13個(gè)不可不知的ASP.NET MVC擴(kuò)展點(diǎn)

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

  在本文中,我們將從管線開(kāi)始直到視圖呈現(xiàn),逐一向您展示每個(gè)ASP.NET MVC開(kāi)發(fā)者都必須了解13個(gè)擴(kuò)展點(diǎn)。

  1.ASP.NET MVC擴(kuò)展之RouteConstraint

  通常情況下你可以使用正則表達(dá)式對(duì)url參數(shù)進(jìn)行約束,但如果您的約束不僅僅取決于單一參數(shù),您可以實(shí)現(xiàn) IRouteConstrains的方法,并在其中添加你的驗(yàn)證邏輯。比如對(duì)日期的驗(yàn)證,url中可能會(huì)包含年、月、日,而你需要驗(yàn)證這三者是否可以組合成一個(gè)有效的日期。

  2.ASP.NET MVC擴(kuò)展之RouteHandler

  RouteHandler是在路由選擇之后進(jìn)行處理的組件,它并不僅僅針對(duì)ASP.NET MVC。顯然,如果您改變了RouteHandler,那么對(duì)請(qǐng)求的處理將不再使用ASP.NET MVC,但這在您使用其他HttpHandler或經(jīng)典的WebForm進(jìn)行路由處理時(shí)卻是非常有用的。

  3.ASP.NET MVC擴(kuò)展之ControllerFactory

  ControllerFactory是基于路由的組件,它選擇正確的controller并對(duì)其實(shí)例化。 default factory會(huì)查找實(shí)現(xiàn)了IController并且以Controller結(jié)尾的類(lèi),然后通過(guò)反射使用無(wú)參構(gòu)造函數(shù)進(jìn)行實(shí)例化。但如果您希望使用依賴(lài)注入,就不能再使用default factory,而必須使用支持IoC的controller factory。MvcContrib和Ninject Controller Factory都包含支持IoC容器的controller factory。

  4.ASP.NET MVC擴(kuò)展之ActionInvoker

  ActionInvoker顧名思義是負(fù)責(zé)調(diào)用(invoke)action的。默認(rèn)的action invoker通過(guò)方法名、action名或其他可能的selector attribute來(lái)查找action,然后調(diào)用action方法以及定義的filter,最終執(zhí)行得到action result。

  你會(huì)發(fā)現(xiàn)大部分執(zhí)行管線存在于ControllerActionInvoker類(lèi)的邏輯之中。因此,如果希望改變這些約定,如action方法的選擇邏輯、http參數(shù)映射到action參數(shù)的方式、選擇和執(zhí)行filter的方式等,您需要擴(kuò)展該類(lèi)并重寫(xiě)需要修改的方法。可以參閱NinjectActionInvoker I developed to allow injection of dependencies inside filters。

  5.ASP.NET MVC擴(kuò)展之ActionMethodSelectorAttribute

  使用默認(rèn)的action invoker時(shí),action的選擇是基于名稱(chēng)的。您也可以實(shí)現(xiàn)自己的Method Selector以改善對(duì)于action的選擇。在框架中已經(jīng)包含了AcceptVerbs特性,它允許您指定使用哪一個(gè)HTTP Verb來(lái)處理action的響應(yīng)。

  例如,您也許會(huì)希望基于瀏覽器所支持的語(yǔ)言或?yàn)g覽器類(lèi)型(如移動(dòng)設(shè)備的瀏覽器或桌面瀏覽器)來(lái)進(jìn)行action 的選取。

      6.ASP.NET MVC擴(kuò)展之AuthorizationFilter

      這種過(guò)濾器是在action執(zhí)行之前執(zhí)行的,用來(lái)確保請(qǐng)求是有效的。框架中已經(jīng)包含了一些autorization過(guò)濾器,最有名的莫過(guò)于Authorize特性,它用來(lái)檢查當(dāng)前用戶是否允許執(zhí)行該action。另一個(gè)是用來(lái)阻止CSRF攻擊的ValidateAntiForgeryToken。如果您希望實(shí)現(xiàn)自己的 authorization,那么必須實(shí)現(xiàn)接口。例如,日期中的小時(shí)。

  7.ASP.NET MVC擴(kuò)展之ActionFilter

  Action Filters在action執(zhí)行前后執(zhí)行。OutputCache過(guò)濾器是幾個(gè)核心過(guò)濾器之一。這可能是您最有可能使用的擴(kuò)展點(diǎn),并且在我看來(lái),controller只關(guān)心它的主要工作,而view所需要的所有其他數(shù)據(jù)都必須從action過(guò)濾器內(nèi)部獲取,這樣的實(shí)現(xiàn)對(duì)于一個(gè)組織良好的view來(lái)說(shuō),是十分關(guān)鍵的。

  8.ASP.NET MVC擴(kuò)展之ModelBinder

  默認(rèn)的model binder使用參數(shù)名稱(chēng)進(jìn)行HTTP參數(shù)到action方法參數(shù)的映射。

      例如,http參數(shù)user.address.city將映射到方法參數(shù) user的Address屬性的City屬性。

      DefaultModelBinder也同樣適用于數(shù)組和其他列表類(lèi)型。更進(jìn)一步來(lái)說(shuō),例如,您可能希望從數(shù)據(jù)庫(kù)中進(jìn)行檢索,直接根據(jù)person的id將其轉(zhuǎn)換為Person對(duì)象。 Timothy Khouri(網(wǎng)名SingingEels)在他的文章Model Binders in ASP.NET MVC中更好的闡述了這種方法。他的代碼基于Preview 5,但其理念是一樣的。

  9.ASP.NET MVC擴(kuò)展之ControllerBase

  所有的Controller均繼承自基類(lèi)Controller。要想在action中封裝自己的邏輯和約定,創(chuàng)建自己的父類(lèi)使所有Controller繼承自該類(lèi),是一種很好的方式。

  10.ASP.NET MVC擴(kuò)展之ResultFilter

  與ActionFilter類(lèi)似,ResultFilters在ActionResult前后執(zhí)行。 OutputCache過(guò)濾器也可以作為ResultFilter的示例。另外,比較常用的詮釋這種過(guò)濾器的示例是日志記錄。如果您希望在頁(yè)面返回給用戶時(shí)記錄日志,可以編寫(xiě)自定義的RenderFilter,在ActionResult執(zhí)行之后記錄日志。

      11.ASP.NET MVC擴(kuò)展之ActionResult

  ASP.NET MVC提供了很多result用來(lái)呈現(xiàn)視圖、JSON、純文本、文件并重定向到其他action。如果您需要其他類(lèi)型的result,可以自定義 ActionResult,并實(shí)現(xiàn)ExecuteResult方法。例如,如果您希望將PDF文件作為結(jié)果發(fā)送,您需要使用PDF庫(kù)編寫(xiě)能夠生成PDF的 ActionResult。

  12.ASP.NET MVC擴(kuò)展之ViewEngine

  您可能不需要編寫(xiě)自己的view engine,但您也許可以考慮使用其他引擎來(lái)替代默認(rèn)的WebForm view engine。在我看來(lái),最有趣的引擎就是Spark。如果您確實(shí)希望編寫(xiě)自己的view engine,可以看一下Brad Wilson的文章: Partial Rendering & View Engines in ASP.NET MVC。

  13.ASP.NET MVC擴(kuò)展之HtmlHelper

  視圖必須十分簡(jiǎn)單整潔,它們只能包含html標(biāo)記并調(diào)用HtmlHelper的輔助方法。視圖中不能包含任何代碼,所以輔助方法必須十分方便,使您可以將代碼從視圖中提取出來(lái),放到一個(gè)可測(cè)試的環(huán)境中去。正如Rob Conery所說(shuō):如果有if,就構(gòu)造輔助方法(If there's an IF, make a Helper)。什么是HtmlHelper輔助方法?其實(shí)就是HtmlHelper類(lèi)的擴(kuò)展方法,這是唯一的要求。你可以從Rob的文章Avoiding Tag Soup中了解到為什么說(shuō)HtmlHelper是封裝視圖中代碼的好方法。

  在您的應(yīng)用中該使用哪個(gè)呢?正如您所猜測(cè)的那樣,并不是所有的應(yīng)用都需要擴(kuò)展以上的13個(gè)擴(kuò)展點(diǎn)。最可能在所有應(yīng)用中進(jìn)行擴(kuò)展的是 ActionFilter和HtmlHelper。另外,您很可能會(huì)使用其他人編寫(xiě)的擴(kuò)展,如使用了IoC容器的ControllerFactory或用來(lái)擺脫WebForm的ViewEngine。但是,學(xué)習(xí)這些擴(kuò)展點(diǎn)并進(jìn)行嘗試是十分重要的,這樣您才會(huì)做出選擇,并隨時(shí)準(zhǔn)備在必要的時(shí)候使用這些強(qiáng)大的擴(kuò)展點(diǎn)。

NET技術(shù)13個(gè)不可不知的ASP.NET MVC擴(kuò)展點(diǎn),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 二区在线视频 | 成人福利视频 | 午夜激情在线 | 激情婷婷 | 国产精品亚洲二区在线 | 91人人看 | 欧美 亚洲 激情 | 久久精品爱国产免费久久 | 五月婷婷激情综合网 | 高清国产美女一级a毛片录 高清国产美女一级毛片 | 国产在线一区二区三区四区 | 久久精品国产亚洲a不卡 | 国产一级不卡毛片 | 狠狠色丁香婷婷久久综合不卡 | 激情欧美人xxxxx | 91免费国产在线观看 | 99在线视频免费观看 | 亚洲综合色婷婷久久 | 亚洲成人h | 丁香在线视频 | 国产精品视频在这里有精品 | 4338×亚洲全国最大色成网站 | 国产成人精品自拍 | 国产成人一区二区三区在线播放 | 久久精品国产四虎 | 亚洲免费视频一区二区三区 | 亚洲欧美国产日产综合不卡 | 日日噜噜噜夜夜爽爽狠狠视频 | 麻豆hd | 日本www色视频成人免费 | 六月婷婷久久 | 精品一区二区三区的国产在线观看 | jizz国产视频 | 77se77亚洲欧美在线大屁股 | 国产91精品在线观看 | 午夜在线观看视频在线播放版 | 国产美女下面流出白浆视频 | 日韩美在线 | 国产精品国产三级国产专不∫ | 亚洲国产成人成上人色 | 国产在视频线精品视频www666 |