出版時(shí)間:2013-1 出版社:電子工業(yè)出版社 作者:蔣金楠 頁數(shù):578 字?jǐn)?shù):855000
Tag標(biāo)簽:無
前言
ASP.NET MVC是一個(gè)建立在ASP.NET平臺(tái)上基于MVC模式的Web開發(fā)框架,它提供了一種與傳統(tǒng)Web Forms完全不同的Web應(yīng)用開發(fā)方式。ASP.NET Web Forms借鑒了Windows Forms基于控件和事件注冊(cè)的編程模式,使Web應(yīng)用的開發(fā)變得簡(jiǎn)單而快捷,但是它卻使開發(fā)人員與Web的本質(zhì)漸行漸遠(yuǎn)。ASP.NET MVC是一種回歸,它使開發(fā)人員可以真正地面向Web進(jìn)行編程,我們面對(duì)的不再是拖拉到Web頁面的控件,而是整個(gè)HTTP請(qǐng)求和響應(yīng)的流程。這不是一本ASP.NET MVC入門書籍我個(gè)人覺得掌握ASP.NET MVC具有三個(gè)層次。了解基本的編程模式,掌握Controller和View的定義方式,知道路由如何注冊(cè),以及驗(yàn)證規(guī)則如何定義,此為第一層次。第二層次要求我們對(duì)ASP.NET MVC框架本身從請(qǐng)求接收到響應(yīng)回復(fù)的整個(gè)流程具有一個(gè)清晰的認(rèn)識(shí),包括請(qǐng)求如何被路由、目標(biāo)Controller如何被激活、Model元數(shù)據(jù)如何被解析、Action方法如何被執(zhí)行、View如何呈現(xiàn)等。ASP.NET MVC本身是一個(gè)極具可擴(kuò)展的開發(fā)框架,合理利用其擴(kuò)展性可以解決很多開發(fā)中的實(shí)際問題,而掌握ASP.NET MVC的最高層次就是憑著對(duì)框架本身的運(yùn)行機(jī)制的了解準(zhǔn)確地找到相應(yīng)的擴(kuò)展點(diǎn),并創(chuàng)建相應(yīng)的擴(kuò)展來解決我們遇到的問題。本書不是一本ASP.NET MVC入門書籍,而是讓處于第一層次的讀者快速進(jìn)入第二和第三層次的書。這是一本講述ASP.NET MVC框架本質(zhì)的書很多.NET開發(fā)人員都在抱怨微軟開發(fā)技術(shù)過快的更新頻率讓他們無所適從。其實(shí)他們看到的只是單純的版本升級(jí)而已,一些本質(zhì)的東西一直是“穩(wěn)定”的。微軟推出.NET戰(zhàn)略已經(jīng)十多年了,CLR卻只有四個(gè)版本而已。最新版本的ASP.NET雖然表面上已經(jīng)看不到太多最初的影子,但是整個(gè)請(qǐng)求處理的管道一直未曾改變。對(duì)于一項(xiàng)開發(fā)技術(shù),只要我們了解了它最根本的一些東西,就不應(yīng)該懼怕其高頻率的版本更替,而應(yīng)該熱烈擁抱它。本書力求將關(guān)于ASP.NET MVC框架最根本的東西帶給大家,而不是羅列一些簡(jiǎn)單的編程技巧。這是一本實(shí)用的書可能有人覺得這本剖析ASP.NET MVC框架運(yùn)行原理的書沒有什么“實(shí)際”的意義,因?yàn)槲覀兠刻斓娜粘9ぷ骶褪蔷幊?,知道了ASP.NET MVC從請(qǐng)求接收到響應(yīng)回復(fù)之間整個(gè)處理流程并不會(huì)對(duì)我們的工作造成實(shí)質(zhì)性的改變。其實(shí)這種想法是極端錯(cuò)誤的,因?yàn)槲覀兙帉懙某绦蜃罱K是在ASP.NET MVC框架上運(yùn)行的,程序的高效性決定于它是否能夠最大限度地“迎合”框架的運(yùn)行機(jī)制,所以了解ASP.NET MVC框架的運(yùn)行原理有利于我們寫出高質(zhì)量的程序。我個(gè)人將基于ASP.NET MVC的編程分為兩類,即“面向業(yè)務(wù)編程“和“面向框架編程”。前者根據(jù)具體的業(yè)務(wù)邏輯定義Controller和設(shè)計(jì)View,這是大部分Web開發(fā)人員的主要工作;后者則是為整個(gè)Web應(yīng)用搭建一個(gè)框架,讓最終的開發(fā)人員只需要關(guān)注具體的業(yè)務(wù)邏輯,而讓框架來完成所有與業(yè)務(wù)無關(guān)的部分。對(duì)于后者,我們可以充分利用ASP.NET MVC的擴(kuò)展性,通過自定義的擴(kuò)展將非業(yè)務(wù)的功能自動(dòng)“注入”到業(yè)務(wù)邏輯的處理流程中,這樣不僅可以提高開發(fā)效率,而且還能提高開發(fā)質(zhì)量。本書在剖析ASP.NET MVC框架運(yùn)行機(jī)制過程中幾乎列出了其所有的擴(kuò)展點(diǎn),并且通過實(shí)例演示的形式提供了很多實(shí)用的擴(kuò)展??梢詫⒈緯暈橐槐尽凹軜?gòu)設(shè)計(jì)”的書在我的周圍存在這樣的一些人,他們以剛畢業(yè)一兩年的畢業(yè)生為主,他們大都工作勤奮、聰明好學(xué),手中經(jīng)常捧著GoF的《設(shè)計(jì)模式》,總是希望將書中的設(shè)計(jì)模式應(yīng)用到具體項(xiàng)目之中,或者希望通過項(xiàng)目的實(shí)踐來印證他們?cè)跁旧系脑O(shè)計(jì)模式,但是理論和實(shí)踐之間的距離總讓他們感到困惑。要從真實(shí)的項(xiàng)目或者產(chǎn)品中學(xué)習(xí)“實(shí)用”的軟件架構(gòu)設(shè)計(jì)知識(shí),先得確定目標(biāo)項(xiàng)目或者產(chǎn)品中采用的架構(gòu)思想和設(shè)計(jì)模式是正確的,而我們參與的很多項(xiàng)目其實(shí)被“架構(gòu)”得一塌糊涂。對(duì)于像ASP.NET這樣的產(chǎn)品,其基礎(chǔ)架構(gòu)能夠在很長一段時(shí)間內(nèi)保持不變,本身就證明了應(yīng)用在上面的架構(gòu)設(shè)計(jì)的正確性,它們不正是我們學(xué)習(xí)架構(gòu)設(shè)計(jì)最好的素材嗎?本書對(duì)ASP.NET MVC框架的運(yùn)行機(jī)制進(jìn)行了深入剖析,實(shí)際上是將ASP.NET MVC的整個(gè)設(shè)計(jì)展示在讀者面前,讀者朋友們也許可以將本書作為一本“架構(gòu)設(shè)計(jì)”的書來讀。本書的寫作特點(diǎn)我想本書的讀者可能很多都讀過我的《WCF全面解析》,雖然內(nèi)容不同,本書卻可能看成是它的延續(xù),因?yàn)樗鼈兓旧喜捎昧讼嗤膶懽魇址???偟貋碇v,我基本上采用“原理講述、代碼分析和實(shí)例證明”這個(gè)模式來介紹某個(gè)技術(shù)要點(diǎn),對(duì)于一個(gè)具體的知識(shí)點(diǎn),我不僅僅會(huì)告訴讀者“是什么”,還會(huì)告訴讀者“為什么”,以及“如何證明是這樣”。除此之外,如果某個(gè)知識(shí)點(diǎn)在真實(shí)的項(xiàng)目開發(fā)中具有“實(shí)用”價(jià)值,我一般會(huì)給出一個(gè)相關(guān)的實(shí)例演示。本書具有一個(gè)與其他中文原創(chuàng)或者翻譯書籍截然不同的特點(diǎn),那就是幾乎所有的術(shù)語都采用英文,比如Controller、Model和View在本書中并沒有翻譯成中文“控制器”、“模型”和“視圖”。因?yàn)槲艺J(rèn)為很多術(shù)語其實(shí)很難找到一個(gè)語義完全等同的中文詞組或短語與之對(duì)應(yīng),對(duì)于習(xí)慣了英文作為“開發(fā)語言”的讀者來說,強(qiáng)行翻譯其實(shí)是不必要的。這不是一本純理論的書,而是一本“實(shí)證型”的書,在書中提供了110個(gè)可供單獨(dú)下載的實(shí)例演示。這些實(shí)例在本書中具有不同的作用,有的是為了探測(cè)和證明對(duì)應(yīng)的論點(diǎn),有的是為了演示某種使用的編程技巧,有的直接就是一個(gè)完整的案例。本書讀者我們說《ASP.NET MVC 4框架揭秘》不是一本ASP.NET MVC入門書籍,主要是因?yàn)楸緯诘?章并沒有提供一個(gè)“Hello World”實(shí)例,關(guān)注重點(diǎn)主要落在ASP.NET MVC框架本身的運(yùn)行機(jī)制上面,但是并不是說本書的讀者需要預(yù)先對(duì)ASP.NET MVC具有多深入的認(rèn)識(shí)才行。如果讀者對(duì)ASP.NET MVC基本的編程模式具有一定的了解,讀懂這本書是完全沒有問題的。對(duì)于從未接觸過ASP.NET MVC的.NET開發(fā)人員,可以通過官方網(wǎng)站來學(xué)習(xí)ASP.NET MVC。本書結(jié)構(gòu)第1章 ASP.NET + MVCASP.NET和MVC,分別代表了ASP.NET MVC的技術(shù)平臺(tái)和設(shè)計(jì)思想。本章對(duì)MVC模式及其變體比如MVP和Model 2等作了概括性介紹,同時(shí)對(duì)ASP.NET的管道式設(shè)計(jì),以及與各種版本的IIS之間的交互機(jī)制進(jìn)行了全面講述。為了讓讀者對(duì)ASP.NET MVC框架的運(yùn)行機(jī)制具有一個(gè)大概的了解,本章按照其原理創(chuàng)建了一個(gè)“迷你版”的ASP.NET MVC。第2章 URL路由ASP.NET MVC借助于URL路由系統(tǒng)實(shí)現(xiàn)了URL模式與目標(biāo)Controller和Action的映射,以及內(nèi)嵌于URL的參數(shù)傳遞?;赨RL路由的編程主要體現(xiàn)在路由映射的注冊(cè)和基于注冊(cè)路由的URL生成上面,本章對(duì)這兩個(gè)方面作了非常詳細(xì)的介紹。URL路由最終是借助于自定義的HttpModule(UrlRoutingModule)實(shí)現(xiàn)的,它利用動(dòng)態(tài)注冊(cè)HttpHandler映射的方式提供針對(duì)URL路由的實(shí)現(xiàn),這是本章著重講述的重點(diǎn)。第3章 Controller的激活本章對(duì)以ControllerFactory為核心的Controller激活系統(tǒng),以及通過DefaultControllerFactory提供的Controller默認(rèn)激活機(jī)制進(jìn)行了詳細(xì)介紹。以IoC的方式激活Controller在實(shí)際的Web應(yīng)用開發(fā)中具有重要的意義,本章以較多的篇幅講述了如何將不同的IoC框架(Unity和Ninject)應(yīng)用到ASP.NET MVC的Controller激活系統(tǒng)中。具體來說,我們以實(shí)例演示的方式講述了三種不同的實(shí)現(xiàn)方式,包括自定義ControllerFactory、ControllerActivator和DependencyResolver。第4章 Model元數(shù)據(jù)的解析Model元數(shù)據(jù)是針對(duì)數(shù)據(jù)類型的一種描述信息,ASP.NET MVC提供了基于數(shù)據(jù)注解特性的聲明式Model元數(shù)據(jù)定義方式,本章對(duì)所有與此相關(guān)的數(shù)據(jù)注解特性,以及它們對(duì)Model元數(shù)據(jù)的影響進(jìn)行了全面的介紹。ASP.NET MVC利用Model元數(shù)據(jù)實(shí)現(xiàn)了模板化的HTML生成方式,本章重點(diǎn)講述了如何為具體的數(shù)據(jù)類型定義編輯和顯示模板,以及定義的模板在調(diào)用HtmlHelper/HtmlHelper的模板方法過程中是如何控制最終生成的HTML的。本章的最后關(guān)注于以ModelMetadataProvider為核心的Model元數(shù)據(jù)提供機(jī)制,以及如何通過自定義ModelMetadataProvider實(shí)現(xiàn)對(duì)Model元數(shù)據(jù)提供機(jī)制的定制。第5章 Model的綁定ASP.NET MVC的Model綁定旨在為目標(biāo)Action方法提供參數(shù)列表。ParameterDescriptor為Model綁定提供了相關(guān)的元數(shù)據(jù)信息,本章以介紹ParameterDescriptor以及相關(guān)的ControllerDescriptor和ActionDescriptor作為開篇。Model綁定所需的最終數(shù)據(jù)通過ValueProvider來提供,本章接下來會(huì)對(duì)實(shí)現(xiàn)在各種不同ValueProvider中的數(shù)據(jù)值提供機(jī)制,以及以ValueProviderFactory為核心的ValueProvider提供機(jī)制進(jìn)行全面而深入的介紹。本章的最后部分著重介紹以ModelBinder為核心的Model綁定系統(tǒng),以及實(shí)現(xiàn)在DefaultModelBinder中的默認(rèn)Model綁定機(jī)制。第6章 Model的驗(yàn)證Action方法在執(zhí)行之前需要通過Model驗(yàn)證機(jī)制確保提供參數(shù)的有效性。本章會(huì)著重講述以ModelValidator為核心的Model驗(yàn)證系統(tǒng),以及通過ModelValidatorProvider實(shí)現(xiàn)的ModelValidator提供機(jī)制。Model驗(yàn)證是伴隨著Model綁定進(jìn)行的,具體執(zhí)行流程的介紹也包含在本章之中。ASP.NET MVC利用ValidationAttribute特性為Model驗(yàn)證提供了一種聲明式編程方式,其背后的實(shí)現(xiàn)機(jī)制是本章重要講述的內(nèi)容。jQuery驗(yàn)證框架被默認(rèn)用于客戶端驗(yàn)證,jQuery驗(yàn)證的編程方式,以及與ASP.NET MVC驗(yàn)證系統(tǒng)的協(xié)作方式會(huì)在本章的最后一部分予以介紹。第7章 Action的執(zhí)行針對(duì)請(qǐng)求的處理最終體現(xiàn)在對(duì)目標(biāo)Action方法的執(zhí)行上面。Action方法可以以同步或者異步的方式執(zhí)行,所以本章以介紹兩種不同的異步Action編程模式作為開篇;此外,同步與異步的差異體現(xiàn)在整個(gè)請(qǐng)求的處理過程中,MvcHandler、Controller、ActionInvoker、ControllerDescriptor和ActionDescriptor等都具有同步和異步的版本,本章會(huì)對(duì)它們作一個(gè)系統(tǒng)的比較。Action的執(zhí)行還伴隨著篩選器的執(zhí)行,在本章的最后對(duì)四種篩選器的作用和執(zhí)行流程進(jìn)行單獨(dú)介紹。第8章 View的呈現(xiàn)ActionResult作為執(zhí)行Action返回的結(jié)果,實(shí)現(xiàn)了對(duì)請(qǐng)求的最終響應(yīng),本章介紹了所有預(yù)定義的ActionResult分別是如何完成針對(duì)請(qǐng)求的響應(yīng)的。作為最重要的ActionResult,ViewResult將整個(gè)預(yù)定義的View呈現(xiàn)出來,而它背后是一套完整的View引擎,View引擎的運(yùn)行機(jī)制,以及與ViewResult的協(xié)作方式是本章介紹的一個(gè)重點(diǎn)。ASP.NET MVC默認(rèn)提供了ASPX和Razor這兩種原生View引擎的支持,針對(duì)Razor引擎的深入剖析被放在本章的最后一部分。第9章 ASP.NET Web APIASP.NET Web API使我們可以很容易地定義REST服務(wù),本章會(huì)提供Web API基本編程模式的介紹。ASP.NET Web API采用了與ASP.NET MVC獨(dú)立但類似的執(zhí)行管道,對(duì)整個(gè)管道從請(qǐng)求接收到響應(yīng)回復(fù)的整個(gè)流程的介紹是本章的重點(diǎn),包括HttpController的激活與執(zhí)行、Action的選擇、Model元數(shù)據(jù)的解析、Action參數(shù)的綁定與執(zhí)行等。第10章 案例實(shí)踐本章提供了一個(gè)名為Video Mall(簡(jiǎn)稱VM)的在線電子商務(wù)購物網(wǎng)站來模擬ASP.NET MVC在真實(shí)項(xiàng)目中的應(yīng)用。VM以SQL Server作為數(shù)據(jù)存儲(chǔ),并采用Entity Framework作為ORM框架進(jìn)行數(shù)據(jù)存取。VM利用了在前面章節(jié)中定義的一系列擴(kuò)展,同時(shí)還涉及了一些架構(gòu)思想和涉及模式,比如模塊化設(shè)計(jì)、IoC、AOP以及Repository等。關(guān)于作者蔣金楠(網(wǎng)名Artech)現(xiàn)就職于某知名軟件公司擔(dān)任高級(jí)軟件顧問。連續(xù)5屆微軟MVP(最有價(jià)值專家),同時(shí)也是少數(shù)的雙料MVP(Solutions Architecture + Connected System)之一。國內(nèi)較早接觸WCF的人之一,2007年2月起在個(gè)人博客上發(fā)表超過兩百篇深入介紹WCF的文章,成為了目前國內(nèi)WCF在線資料的主要來源。致謝本書得以出版,需要感謝本書的編輯張春雨先生和葛娜小姐,你們的專業(yè)水準(zhǔn)和責(zé)任心是為本書提供的質(zhì)量保證,期待著與你們第三度合作的機(jī)會(huì)。此外,最需要感謝的是我的老婆徐妍妍,只有我知道你在本書提交給出版社之前所作的校對(duì)工作有多么重要。本書支持本書針對(duì)最新版本的ASP.NET MVC,同時(shí)涉及太多底層實(shí)現(xiàn)的內(nèi)容,所以大部分內(nèi)容是找不到任何現(xiàn)成參考資料的,這些內(nèi)容大都來自于作者對(duì)源碼的分析和試驗(yàn)的證明。本書的最初版本是根據(jù)ASP.NET MVC 4 Beta撰寫的,差不多快寫完的時(shí)候微軟發(fā)布了ASP.NET MVC 4 RC,然后我根據(jù)RC對(duì)原來的內(nèi)容作了不小的改動(dòng)。在ASP.NET MVC4正式推出之后,我第一時(shí)間聯(lián)系到了Scott Guthrie,從他們團(tuán)隊(duì)得到了一份正式版與RC之間變化的列表,并據(jù)此又作了一些修改。這些因素加上我本人能力的限制,都可能造成一些無法避免的錯(cuò)誤或者偏差,如果讀者在閱讀過程中發(fā)現(xiàn)了任何問題,希望能夠反饋給我。如果讀者遇到任何ASP.NET MVC或者是WCF的問題,也歡迎與我通過以下的方式進(jìn)行交流。
內(nèi)容概要
針對(duì)最新版本的ASP.NET MVC
4,深入剖析底層框架從請(qǐng)求接收到響應(yīng)回復(fù)的整個(gè)處理流程(包括URL路由、Controller的激活、Model元數(shù)據(jù)的解析、Model的綁定、Model的驗(yàn)證、Action的執(zhí)行、View的呈現(xiàn)和ASP.NET
Web API等),并在此基礎(chǔ)上指導(dǎo)讀者如何通過對(duì)ASP.NET MVC框架本身的擴(kuò)展解決應(yīng)用開發(fā)中的實(shí)際問題。
作者簡(jiǎn)介
蔣金楠,網(wǎng)名Artech,高級(jí)軟件顧問。微軟6任MVP(Solutions Architecture、Connected
System與Microsoft Integration)。著《WCF全面解析》(上、下冊(cè))、《ASP.NET MVC
4框架揭秘》等。對(duì).NET Framework、C#、ASP.NET、SQL
Server、設(shè)計(jì)模式、軟件架構(gòu),以及主流的開源框架有著深入的研究。尤其是在WCF技術(shù)方面,屬國內(nèi)較早接觸WCF的人之一,同時(shí)對(duì).NET
Remoting、MSMQ通信技術(shù)有深入的理解。博客園推薦博客(目前排名第一),2012年度51CTO
IT博客大賽10佳。
書籍目錄
第1章 ASP.NET +
MVC
1.1 傳統(tǒng)MVC模式
1.1.1 自治視圖
1.1.2 什么是MVC模式
1.2 MVC的變體
1.2.1 MVP
1.2.2 Model
2
1.2.3 ASP.NETMVC與Model 2
1.3 IIS/ASP.NET管道
1.3.1 IIS
5.x與ASP.NET
1.3.2 IIS
6.0與ASP.NET
1.3.3 IIS
7.0與ASP.NET
1.3.4 ASP.NET管道
1.4 ASP.NET
MVC是如何運(yùn)行的
1.4.1 建立在“迷你版”ASP.NET
MVC上的Web應(yīng)用
1.4.2 URL路由
1.4.3
Controller的激活
1.4.4 Action的執(zhí)行
本章小結(jié)
第2章 URL路由
2.1 ASP.NET路由系統(tǒng)
2.1.1 請(qǐng)求URL與物理文件的分離
2.1.2
實(shí)例演示:通過URL路由實(shí)現(xiàn)請(qǐng)求地址與.aspx頁面的映射(S201)
2.1.3 Route與RouteTable
2.1.4 路由映射
2.1.5 根據(jù)路由規(guī)則生成URL
2.2 ASP.NET
MVC擴(kuò)展
2.2.1 路由映射
2.2.2
實(shí)例演示:注冊(cè)路由映射與查看路由信息(S208)
2.2.3 缺省URL參數(shù)
2.2.4 基于Area的路由映射
2.2.5 鏈接和URL的生成
2.3 動(dòng)態(tài)HttpHandler映射
2.3.1
UrlRoutingModule
2.3.2 PageRouteHandler與MvcRouteHandler
2.3.3
ASP.NET路由系統(tǒng)擴(kuò)展
本章小結(jié)
第3章 Controller的激活
3.1 總體設(shè)計(jì)
3.1.1 Controller
3.1.2
ControllerFactory
3.1.3
ControllerBuilder
3.1.4 Controller的激活與URL路由
3.2 默認(rèn)實(shí)現(xiàn)
3.2.1
Controller類型的解析
3.2.2
Controller類型的緩存
3.2.3
Controller的釋放和會(huì)話狀態(tài)行為的控制
3.3 IoC的應(yīng)用
3.3.1 從Unity來認(rèn)識(shí)IoC
3.3.2
Controller與Model的分離
3.3.3 基于IoC的ControllerFactory
3.3.4 基于IoC的ControllerActivator
3.3.5
基于IoC的DependencyResolver
本章小結(jié)
第4章 Model元數(shù)據(jù)的解析
4.1
Model元數(shù)據(jù)及其定制
4.1.1 Model元數(shù)據(jù)層次化結(jié)構(gòu)
4.1.2 基本Model元數(shù)據(jù)信息
4.1.3 Model元數(shù)據(jù)的定制
4.1.4
IMetadataAware接口
4.2
Model元數(shù)據(jù)與Model模板
4.2.1
實(shí)例演示:通過模板將布爾值顯示為RadioButton(S409)
4.2.2
預(yù)定義模板
4.2.3
DataTypeName與模板名稱
4.2.4 模板的獲取與執(zhí)行
4.2.5 實(shí)例演示:通過定制Model元數(shù)據(jù)和自定義模板
實(shí)現(xiàn)預(yù)定義列表的呈現(xiàn)(S412)
4.3 Model元數(shù)據(jù)的提供機(jī)制
4.3.1
再談ModelMetadata
4.3.2 ModelMetadataProvider
4.3.3 Model元數(shù)據(jù)提供系統(tǒng)的擴(kuò)展
本章小結(jié)
第5章 Model的綁定
5.1
ControllerDescriptor、ActionDescriptor與ParameterDescriptor
5.1.1 ControllerDescriptor
5.1.2
ActionDescriptor
5.1.3 ParameterDescriptor
5.2 ValueProvider
5.2.1 NameValueCollectionValueProvider
5.2.2
DictionaryValueProvider
5.2.3 ValueProviderFactory
5.2.4
ValueProviderFactories
5.3 ModelBinder
5.3.1
ModelBinder與ModelBinderProvider
5.3.2
ModelState與Model綁定
5.3.3 ModelBindingContext的創(chuàng)建
5.4
Model綁定的默認(rèn)實(shí)現(xiàn)
5.4.1 簡(jiǎn)單類型
5.4.2 復(fù)雜類型
5.4.3 數(shù)組
5.4.4 集合
5.4.5 字典
本章小結(jié)
第6章 Model的驗(yàn)證
6.1 ModelValidator與ModelValidatorProvider
6.1.1 ModelValidator
6.1.2
ModelValidatorProvider
6.1.3 ModelValidatorProviders
6.2
Model綁定與驗(yàn)證
6.2.1 ModelState
6.2.2
驗(yàn)證消息的呈現(xiàn)
6.2.3 Model綁定中的驗(yàn)證
6.3
基于數(shù)據(jù)注解特性的Model驗(yàn)證
6.3.1 ValidationAttribute特性
6.3.2
DataAnnotationsModelValidator
6.3.3 DataAnnotationsModelValidatorProvider
6.3.4
將ValidationAttribute應(yīng)用到參數(shù)上
6.3.5 一種Model類型,多種驗(yàn)證規(guī)則
6.4 客戶端驗(yàn)證
6.4.1
jQuery驗(yàn)證
6.4.2
基于jQuery的Model驗(yàn)證
6.4.3
自定義驗(yàn)證
本章小結(jié)
第7章 Action的執(zhí)行
7.1
異步Action的定義
7.1.1 基于線程池的請(qǐng)求處理機(jī)制
7.1.2 兩種異步Action方法的定義
7.1.3 AsyncManager
7.2
Action方法的執(zhí)行
7.2.1
MvcHandler對(duì)請(qǐng)求的處理
7.2.2
Controller的執(zhí)行
7.2.3 ActionInvoker的執(zhí)行
7.2.4 ControllerDescriptor的同步與異步
7.2.5 ActionDescriptor的執(zhí)行
7.3 篩選器的執(zhí)行
7.3.1 Filter及其提供機(jī)制
7.3.2
AuthorizationFilter
7.3.3 ActionFilter
7.3.4 ExceptionFilter
7.3.5 實(shí)例演示:集成EntLib實(shí)現(xiàn)自動(dòng)化異常處理(S713, S714,
S715)
7.3.6 ResultFilter
本章小結(jié)
第8章 View的呈現(xiàn)
8.1 ActionResult
8.1.1
EmptyResult
8.1.2 ContentResult
8.1.3 FileResult
8.1.4 JavaScriptResult
8.1.5 JsonResult
8.1.6
HttpStatusCodeResult
8.1.7
RedirectResult/RedirectToRouteResult
8.2 ViewResult與ViewEngine
8.2.1 View引擎中的View
8.2.2 ViewEngine
8.2.3 ViewResult的執(zhí)行
8.3 Razor引擎
8.3.1
View的編譯原理
8.3.2
WebViewPage與WebViewPage
8.3.3 RazorView
8.3.4
RazorViewEngine
本章小結(jié)
第9章 ASP.NET Web API
9.1 Web、REST與Web API
9.1.1 Web如此簡(jiǎn)單
9.1.2
REST是什么
9.1.3 ASP.NET Web
API
9.2 服務(wù)端管道
9.2.1 ASP.NET Web API管道式設(shè)計(jì)
9.2.2 HttpMessageHandler
9.2.3 HttpServer
9.2.4
實(shí)例演示:自定義HttpMessageHandler實(shí)現(xiàn)HTTP方法重寫(S903)
9.3
HttpControllerDispatcher
9.3.1
HttpController的激活
9.3.2
HttpController的執(zhí)行
9.3.3 Action的選擇
9.3.4 Model元數(shù)據(jù)的解析
9.3.5 Action參數(shù)綁定
9.3.6 Model驗(yàn)證
9.3.7 Action的執(zhí)行與結(jié)果的響應(yīng)
9.4 Web API的調(diào)用和自我寄宿
9.4.1 HttpClient
9.4.2 HttpSelfHostServer
章節(jié)摘錄
版權(quán)頁: 插圖: ASP.NET集成 從上面對(duì)IIS 5.x和IIS 6.0的介紹中,我們不難發(fā)現(xiàn)IIS與ASENET是兩個(gè)相互獨(dú)立的管道(Pipeline)。在各自管轄范圍內(nèi),它們各自具有自己的一套機(jī)制對(duì)HTTP請(qǐng)求進(jìn)行處理。 兩個(gè)管道通過ISAPI實(shí)現(xiàn)“連通”,IIS是第一道屏障,當(dāng)對(duì)HTTP請(qǐng)求進(jìn)行必要的前期處理(比如身份驗(yàn)證等)后,通過ISAPI將請(qǐng)求分發(fā)給ASENET管道。當(dāng)ASENET在自身管道范圍內(nèi)完成對(duì)HTTP請(qǐng)求的處理時(shí),處理后的結(jié)果再返回到IIS,IIS對(duì)其進(jìn)行后期處理(比如日志記錄、壓縮等),最終生成HTTP響應(yīng)。圖1—9反映了IIS 6.0與ASENET之間的橋接關(guān)系。 從另一個(gè)角度講,IIS運(yùn)行在非托管的環(huán)境中,而ASENET管道則是托管的,ISAPI還是連接非托管環(huán)境和托管環(huán)境的紐帶。IIS 5.x和IIS 6.0把兩個(gè)管道進(jìn)行隔離至少帶來了下面的一些局限與不足。 相同操作的重復(fù)執(zhí)行:IIS與ASP.NET之間具有一些重復(fù)的操作,比如身份驗(yàn)證。 動(dòng)態(tài)文件與靜態(tài)文件處理的不一致:因?yàn)橹挥谢贏SP.NET動(dòng)態(tài)文件(比如.aspx、.asmx、.svc等)的HTTP請(qǐng)求才能通過ASENET ISAPI進(jìn)入ASP.NET管道,而對(duì)于一些靜態(tài)文件(比如.html、.xml、.img等)的請(qǐng)求則由IIS直接響應(yīng),那么ASP.ENET管道中的一些功能將不能用于這些基于靜態(tài)文件的請(qǐng)求,比如我們希望通過Foms認(rèn)證應(yīng)用于基于圖片文件的請(qǐng)求就做不到。 IIS難以擴(kuò)展:對(duì)于IIS的擴(kuò)展基本上就體現(xiàn)在自定義ISAPI,但是對(duì)于大部分人來說,這不是一件容易的事情。因?yàn)镮SAPI是基于Win32的非托管的API,并非一種面向應(yīng)用的編程接口。通常我們希望的是諸如定義ASP.NET的HttpModule和HttpHandler一樣,通過托管代碼的方式來擴(kuò)展IIS。
編輯推薦
《ASP.NET MVC4框架揭秘》是讓處于ASP.NETMVC第一層次的讀者快速進(jìn)入第二和第三層次的書。ASP.NET MVC功能強(qiáng)大,它提供了一種全新的編程方式,使我們可以將MVC模式很自然地融入動(dòng)態(tài)網(wǎng)站的開發(fā)之中。由它帶來的對(duì)關(guān)注點(diǎn)清晰分離和對(duì)HTML的細(xì)粒度控制使我們真正體會(huì)到了敏捷開發(fā)的樂趣。借助于ASP.NET MVc提供的眾多特性,不但可以使我們?cè)趶?fù)雜應(yīng)用中靈活地采用TDD(測(cè)試驅(qū)動(dòng)開發(fā))的夢(mèng)想變成現(xiàn)實(shí),還能讓我們的應(yīng)用盡可能地?fù)肀ё钚碌腤eb標(biāo)準(zhǔn)。
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載