溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET Web API 2框架揭秘

發(fā)布時(shí)間:2020-06-12 16:30:20 來(lái)源:網(wǎng)絡(luò) 閱讀:828 作者:博文視點(diǎn) 欄目:編程語(yǔ)言

ASP.NET Web API2框架揭秘(.NET領(lǐng)域再現(xiàn)力作頂級(jí)專(zhuān)家精講微軟全新輕量級(jí)通信平臺(tái)

蔣金楠 著  

ISBN 978-7-121-23536-8

2014年7月出版

定價(jià):108.00元

732頁(yè)

16開(kāi)

編輯推薦

這是一本注重實(shí)證的書(shū),功能各異、多達(dá)120個(gè)可供下載的示例,大量最佳實(shí)踐與實(shí)用性擴(kuò)展,可直接用于解決實(shí)際開(kāi)發(fā)問(wèn)題。

全新的學(xué)習(xí)方法,通過(guò)完整論證來(lái)實(shí)現(xiàn)徹底的融會(huì)貫通。

本書(shū)可以作為講設(shè)計(jì)架構(gòu)的書(shū)來(lái)讀,因?yàn)槠湟越?jīng)過(guò)長(zhǎng)期檢驗(yàn)的經(jīng)典架構(gòu)作為學(xué)習(xí)素材,可很好地啟發(fā)深度思考。

講原理的書(shū)同樣足夠?qū)嵱?。了?/span>ASP.NET Web API框架的運(yùn)行原理,才能寫(xiě)出最迎合框架的高效程序,才能找到解決具體項(xiàng)目問(wèn)題的最佳擴(kuò)展點(diǎn)。

這是一本幫助你提升內(nèi)功的書(shū)。雖然編程模式可以速成,但本書(shū)還是希望你最好對(duì)ASP.NETWeb APIASP.NET MVC有基本概念。

內(nèi)容提要

ASP.NET Web API 2框架揭秘》以實(shí)例演示的方式介紹了很多與ASP.NET Web API 相關(guān)的最佳實(shí)踐,同時(shí)還提供了一系列實(shí)用性的擴(kuò)展?!?/span>ASP.NET Web API 2框架揭秘》詳細(xì)講解了ASP.NETWeb API 從接收請(qǐng)求到響應(yīng)回復(fù)的整個(gè)流程,包括路由、HttpController 的激活、Action 方法的選擇與執(zhí)行、參數(shù)的綁定與驗(yàn)證、過(guò)濾器的執(zhí)行和安全等相關(guān)的機(jī)制。

除此之外,《ASP.NET Web API 2框架揭秘》在很多章節(jié)還從設(shè)計(jì)的角度對(duì)ASP.NET Web API 的架構(gòu)進(jìn)行了深入分析,所以可以將《ASP.NET Web API 2框架揭秘》當(dāng)作一本架構(gòu)設(shè)計(jì)的書(shū)來(lái)讀。

雖然與市面上任何一本相關(guān)的書(shū)相比,《ASP.NET Web API 2框架揭秘》走得更遠(yuǎn)并更加近距離地觸及到ASP.NET Web API 框架的內(nèi)核,但是就其內(nèi)容本身來(lái)講卻沒(méi)有涉及太多“高深莫測(cè)”的知識(shí)點(diǎn),所以閱讀《ASP.NET Web API 2框架揭秘》不存在太高的門(mén)檻。如果你覺(jué)得自己對(duì)ASP.NET Web API 所知甚少,可以利用《ASP.NETWeb API 2框架揭秘》來(lái)系統(tǒng)地學(xué)習(xí)ASP.NET WebAPI;如果你覺(jué)得自己對(duì)ASP.NET Web API 足夠精通,也一定能夠通過(guò)閱讀《ASP.NET Web API 2框架揭秘》發(fā)現(xiàn)自己知識(shí)的“盲點(diǎn)”。

目錄

第1 章 概述.....................1

1.1 何為Web.............................2

1.1.1 TCP/IP 與HTTP..................2

1.1.2 Web 資源...................................4

1.1.3 HTTP 事務(wù)................................6

1.1.4 HTTP 報(bào)文..........................7

1.2 RESTful WebAPI..................................8

1.2.1 為什么叫這個(gè)奇怪的名字..................9

1.2.2 RESTful WebAPI 具有怎樣的特征.......................10

1.3 初識(shí)ASP.NET WebAPI...............................18

1.3.1 構(gòu)建解決方案.......................18

1.3.2 定義WebAPI........................20

1.3.3 以Web Host 方式寄宿Web API ..................21

1.3.4 以Self Host 方式寄宿Web API..........................27

1.3.5 利用HttpClient 調(diào)用Web API ..........................28

1.3.6 創(chuàng)建一個(gè)“聯(lián)系人管理器”應(yīng)用......................31

第2 章 路由...............................41

2.1 ASP.NET 路由...............................42

2.1.1 請(qǐng)求URL 與物理文件的分離....................42

2.1.2 實(shí)例演示:通過(guò)URL 路由實(shí)現(xiàn)請(qǐng)求地址與Web 頁(yè)面的映射...........43

2.1.3 ASP.NET 路由系統(tǒng)..................................47

2.1.4 注冊(cè)路由映射...............55

2.1.5 根據(jù)路由規(guī)則生成URL..............................68

2.1.6 HttpHandler 的動(dòng)態(tài)映射............................70

2.2 ASP.NET Web API路由.................................73

2.2.1 請(qǐng)求與響應(yīng).....................73

2.2.2 ASP.NET WebAPI 路由系統(tǒng)..................77

2.2.3 注冊(cè)路由映射.................91

2.3 兩個(gè)路由系統(tǒng)的銜接.........................94

2.3.1HostedHttpRoute 與HostedHttpRouteCollection ............94

2.3.2HttpControllerRouteHandler 與HttpControllerHandler ............. 100

第3 章 消息處理管道................ 103

3.1HttpMessageHandler 管道........................ 104

3.1.1HttpMessageHandler ....................................... 104

3.1.2DelegatingHandler ......................................... 106

3.1.3 HttpServer.................................................. 107

3.1.4HttpRoutingDispatcher........................................114

3.2 Web Host 模式下的消息處理管道...............119

3.2.1HttpControllerHandler ...........................................119

3.2.2 實(shí)例演示:自定義HttpMessageHandler實(shí)現(xiàn)HTTP 方法重寫(xiě)(S305) .... 126

3.3 Self Host 模式下的消息處理管道..........................130

3.3.1 HttpBinding........................... 130

3.3.2HttpSelfHostServer.......................... 136

第4 章 HttpController 的激活......................145

4.1HttpController...................... 146

4.1.1HttpControllerContext................ 147

4.1.2HttpControllerDescriptor ....... 147

4.1.3ApiController..................................................... 149

4.2 HttpController 是如何被創(chuàng)建的...................151

4.2.1 程序集的解析.................................................151

4.2.2HttpController 類(lèi)型的解析..................... 161

4.2.3 HttpController的選擇..................................... 165

4.2.4HttpController 的創(chuàng)建................................ 173

4.2.5HttpController 的激活與釋放............... 178

4.3 IoC 的應(yīng)用.....................................................183

4.3.1 利用Unity 來(lái)認(rèn)識(shí)IoC.......................... 183

4.3.2 基于IoC 的HttpControllerActivator.................... 185

4.3.3 基于IoC 的DependencyResolver............................ 188

第5 章 Action 的選擇........................ 191

5.1HttpActionDescriptor..................... 192

5.1.1 ReflectedHttpActionDescriptor............ 193

5.1.2ActionNameAttribute ............. 194

5.1.3 方法名決定HTTP 方法................................ 195

5.1.4ActionHttpMethodProvider....................................... 197

5.1.5 針對(duì)特性的緩存.............................................200

5.2HttpParameterDescriptor.............. 201

5.2.1ReflectedHttpParameterDescriptor................................ 202

5.2.2 實(shí)例演示:解析Action方法參數(shù)描述信息................ 204

5.3HttpActionSelector ........................ 205

5.3.1 ApiControllerActionSelector....................206

5.3.2 有效的Action 方法............................ 207

5.3.3 目標(biāo)Action 方法的選擇..................... 208

第6 章 特性路由...................... 218

6.1 特性路由注冊(cè).......................219

6.1.1HttpRouteInfoProvider 特性....................... 219

6.1.2 基本路由映射...........................................220

6.1.3 讓URL 模板能夠盡可能反映資源的層次結(jié)構(gòu).................... 222

6.1.4 為路由變量設(shè)置約束......................226

6.1.5 通配符路由變量......................................227

6.1.6 缺省路由變量.........................................228

6.1.7 設(shè)置URI 前綴....................................... 230

6.2 約束表達(dá)式的解析...........................................231

6.2.1RangeRouteConstraint ................. 232

6.2.2InlineConstraintResolver ............. 233

6.2.3 自定義約束...................237

6.3 路由解析.....................241

6.3.1RouteCollectionRoute ............. 241

6.3.2 實(shí)例演示:查看特性路由注冊(cè)生成的RouteCollectionRoute 對(duì)象........ 243

6.3.3 子路由對(duì)象的創(chuàng)建...................248

6.3.4 HttpRouteData的生成........... 255

第7 章 Model 綁定(上篇) .......... 262

7.1 Model 綁定解決怎樣的問(wèn)題.............263

7.1.1 基于HttpRouteData的參數(shù)綁定............. 263

7.1.2 基于查詢字符串的參數(shù)綁定..............267

7.2 Model 元數(shù)據(jù)的解析...................................268

7.2.1 Model 元數(shù)據(jù)的層次化結(jié)構(gòu).................268

7.2.2ModelMetadata............ 270

7.2.3ModelMetadataProvider............ 278

7.3 ValueProvider.................. 282

7.3.1ValueProviderResult ............................ 282

7.3.2NameValuePairsValueProvider .......... 285

7.3.3RouteDataValueProvider 與QueryStringValueProvider ...... 295

7.3.4CompositeValueProvider ........... 296

7.4ValueProviderFactory ............ 296

7.4.1RouteDataValueProviderFactory 與QueryStringValueProviderFactory.. 297

7.4.2CompositeValueProviderFactory........... 298

7.4.3ValueProviderFactory 的注冊(cè)................................ 299

7.4.4 自定義ValueProviderFactory.....301

第8 章 Model 綁定(下篇) ............. 304

8.1 ModelBinder................ 305

8.1.1ModelBindingContext.......... 306

8.1.2 去除前綴后的二次綁定...........307

8.1.3CompositeModelBinder ............ 309

8.2ModelBinderProvider......................... 310

8.2.1CompositeModelBinderProvider................311

8.2.2ModelBinderAttribute ........... 312

8.2.3 Model 綁定的流程......................313

8.3 針對(duì)不同目標(biāo)類(lèi)型的Model綁定....................... 314

8.3.1 簡(jiǎn)單類(lèi)型..............315

8.3.2 復(fù)雜類(lèi)型...................318

8.3.3 集合...................327

8.3.4 數(shù)組................340

8.3.5 字典................343

8.3.6 最后一個(gè)ModelBinder........ 350

8.4ModelState............... 355

8.4.1 ApiController的ModelState ........................ 355

8.4.2 實(shí)例演示:獲取Model 綁定過(guò)程中由ValueProvider 提供的數(shù)據(jù)(S808).... 357

第9 章 參數(shù)的綁定............... 359

9.1 參數(shù)綁定系統(tǒng)全景展示...............360

9.1.1HttpParameterBinding.......... 361

9.1.2ActionValueBinder............. 362

9.2 5 個(gè)原生的HttpParameterBinding............ 365

9.2.1ModelBinderParameterBinding ............ 365

9.2.2FormatterParameterBinding ................ 368

9.2.3HttpRequestParameterBinding......... 387

9.2.4CancellationTokenParameterBinding ....... 388

9.2.5ErrorParameterBinding ........ 390

9.3HttpParameterBinding 的創(chuàng)建策略.......................... 392

9.3.1ParameterBindingAttribute 特性.............. 392

9.3.2 注冊(cè)參數(shù)綁定規(guī)則..............................397

9.3.3HttpParameterBinding 的創(chuàng)建策略................ 400

第10 章 參數(shù)的驗(yàn)證........... 406

10.1 幾種參數(shù)驗(yàn)證方式..............407

10.1.1 手工驗(yàn)證綁定的參數(shù)...............407

10.1.2 使用ValidationAttribute特性..................411

10.1.3 創(chuàng)建自我驗(yàn)證數(shù)據(jù)類(lèi)型...........................416

10.2 以ModelValidator為核心的參數(shù)驗(yàn)證系統(tǒng)................... 418

10.2.1DataAnnotationsModelValidator ........... 421

10.2.2 RequiredMemberModelValidator...........422

10.2.3ValidatableObjectAdapter.......... 425

10.2.4ErrorModelValidator ............ 426

10.3 基于數(shù)據(jù)注解特性的參數(shù)驗(yàn)證.......................431

10.3.1ValidationAttribute 特性.............. 431

10.3.2DataAnnotationsModelValidator ............. 437

10.3.3DataAnnotationsModelValidatorProvider......... 439

10.4 參數(shù)驗(yàn)證流程............442

10.4.1ModelValidationNode ............. 443

10.4.2 “驗(yàn)證樹(shù)”是如何被建立起來(lái)的................. 448

10.4.3 “必需”數(shù)據(jù)成員的驗(yàn)證...........................457

10.4.4 BodyModelValidator............... 462

第11 章 Action 的執(zhí)行.................. 472

11.1 Action 方法的執(zhí)行..................473

11.1.1HttpActionInvoker ........... 473

11.1.2ActionExecutor............... 477

11.2 內(nèi)容協(xié)商..................484

11.2.1ContentNegotiator............. 484

11.2.2MediaTypeFormatter 是如何被篩選出來(lái)的.............. 486

11.2.3 如何確定響應(yīng)字符集.............................498

11.3HttpActionResult ................. 501

11.3.1 無(wú)響應(yīng)主體的HttpActionResult....................... 502

11.3.2 含響應(yīng)主體的HttpActionResult..................... 506

11.3.3ResponseMessageResult .......... 517

11.4HttpResponseMessage 的生成.............. 518

11.4.1ActionResultConverter........... 518

11.4.2 從消息處理管道來(lái)看HttpResponseMessage的生成................... 523

第12 章 過(guò)濾器........................ 527

12.1 Filter 及其提供機(jī)制....................528

12.1.1Filter........ 528

12.1.2FilterProvider............... 531

12.1.3 5 種Filter 類(lèi)型.................. 539

12.2 認(rèn)證與授權(quán)..................540

12.2.1Identity............. 540

12.2.2 Principal................... 544

12.2.3AuthenticationFilter............. 548

12.2.4AuthorizationFilter ............... 554

12.3 針對(duì)Action 方法執(zhí)行前后的攔截................. 558

12.3.1ActionFilterAttribute................ 559

12.3.2 實(shí)例演示:利用自定義ActionFilter實(shí)現(xiàn)對(duì)Action 方法執(zhí)行結(jié)果的緩存..............565

12.4 異常處理與Filter 的屏蔽........... 572

12.4.1ExceptionFilter............... 572

12.4.2 實(shí)例演示:利用自定義的ExceptionFilter集成EntLib 進(jìn)行異常處理(S1208) ............ 574

12.4.3OverrideFilter ................ 579

第13 章 安全..................... 585

13.1 IIS/ASP.NET 認(rèn)證..............586

13.1.1 Basic 認(rèn)證...................586

13.1.2 Digest 認(rèn)證..................591

13.1.3 集成Windows 認(rèn)證............. 594

13.1.4 Forms 認(rèn)證.......................602

13.2 SSL/TLS............ 608

13.2.1 非對(duì)稱加密...............608

13.2.2 通過(guò)SSL/TLS 實(shí)現(xiàn)傳輸安全............... 614

13.2.3 SSL/TLS 的應(yīng)用...............615

13.3 第三方認(rèn)證....................619

13.3.1 OAuth 2.0 簡(jiǎn)介..................620

13.3.2 ImplicitAuthorization Grant ........................ 624

13.3.3Authorization Code Authorization Grant .............. 632

第14 章 跨域資源共享.............. 643

14.1 同源策略.................644

14.1.1 實(shí)例演示:跨域調(diào)用WebAPI.............. 645

14.1.2 JSONP............ 648

14.2 CORS 規(guī)范.............654

14.2.1 資源的授權(quán)...............654

14.2.2 實(shí)例演示:利用自定義的MessageHandler支持跨域資源共享......... 658

14.3 CORS 在ASP.NET WebAPI 中的實(shí)現(xiàn)................ 667

14.3.1 實(shí)例演示:采用ASP.NETWeb API 原生的機(jī)制實(shí)現(xiàn)跨域資源共享(S1406)......... 668

14.3.2 CORS 授權(quán)策略及其提供機(jī)制.............670

14.3.3 資源授權(quán)的檢驗(yàn)和CORS 響應(yīng)報(bào)頭的生成............. 675

14.3.4CorsMessageHandler............... 678

第15 章 Web API 的調(diào)用................. 685

15.1 HttpClient.............. 686

15.1.1HttpMessageInvoker ......... 686

15.1.2HttpClientHandler......... 687

15.1.3HttpClient............. 697

15.2 客戶端消息處理管道................700

15.2.1HttpMessageHandler 管道...................... 700

15.2.2HttpClientFactory .......... 703

15.3 面向“對(duì)象”編程....................704

15.3.1 將數(shù)據(jù)對(duì)象寫(xiě)入請(qǐng)求消息....................704

15.3.2 讀取HTTP 消息主體內(nèi)容并反序列化為數(shù)據(jù)對(duì)象........... 707

附錄A 實(shí)例列表.......... 709

媒體推薦

互聯(lián)網(wǎng)應(yīng)用尤其是移動(dòng)互聯(lián)網(wǎng)應(yīng)用的普及,讓采用Web直接通信的輕量級(jí)Web Service成為主流,本書(shū)要講的正是ASP.NET Web API。它是一個(gè)全新的通信平臺(tái),因?yàn)槲④洓](méi)有選擇在重量級(jí)框架上通過(guò)擴(kuò)展實(shí)現(xiàn)輕量級(jí)通信。本書(shū)宗旨是清晰呈現(xiàn)消息處理管道,以使讀者完全理解從接收請(qǐng)求到響應(yīng)回復(fù)的全流程,并徹底掌握路由、HttpController激活、Action方法的選擇與執(zhí)行、參數(shù)的綁定與驗(yàn)證、過(guò)濾器的執(zhí)行和安全等相關(guān)機(jī)制。

作者簡(jiǎn)介

蔣金楠(網(wǎng)名Artech),《WCF全面解析(上、下冊(cè))》《ASP.NET MVC 4框架揭秘》《ASP.NET MVC 5框架揭秘》等多部暢銷(xiāo)IT圖書(shū)作者,現(xiàn)就職于一知名軟件公司擔(dān)任高級(jí)軟件顧問(wèn)。擁有一個(gè)訪問(wèn)量超過(guò)200萬(wàn)的個(gè)人博客,2012年度51CTO IT博客大賽10佳得主。2007—2013年被連續(xù)7次評(píng)為微軟MVP,同時(shí)也是少數(shù)幾個(gè)跨多領(lǐng)域(Solutions Architect、Connected SystemMicrosoft IntegrationASP.NET/IIS )的MVP之一。

作者博客: http://www.cnblogs.com/artech

作者微博: http://www.weibo.com/artech

電子郵箱:jiangjinnan@gmail.com

微信公眾賬號(hào):Artech2981

前言

我覺(jué)得大部分人都是“眼球動(dòng)物”,他們關(guān)注的往往都是目光所及的東西。對(duì)于很多軟件從業(yè)者來(lái)說(shuō),他們對(duì)看得見(jiàn)(具有UI界面)的應(yīng)用抱有極大的熱忱,但是對(duì)背后支撐整個(gè)應(yīng)用的服務(wù)卻顯得較為冷漠。如果我們將整個(gè)“生態(tài)系統(tǒng)”比喻成海面上漂浮的冰山,我們所能看到的只是露出水面的冰山一角,水面之下才是一個(gè)“龐然大物”。

提到服務(wù),我們自然想到Web Service。但是傳統(tǒng)意義上的WebService卻有點(diǎn)名不副實(shí),因?yàn)橹嗡钠鋵?shí)不是Web而是SOAP,承載一個(gè)Web Service甚至可以根本不需要Web。隨著互聯(lián)網(wǎng)的普及,互聯(lián)網(wǎng)應(yīng)用(尤其移動(dòng)互聯(lián)網(wǎng)應(yīng)用)已經(jīng)成為主流,“SOAP之重”已經(jīng)越來(lái)越令我們無(wú)法承受,于是采用REST架構(gòu)風(fēng)格并直接采用Web進(jìn)行通信的輕量級(jí)Web Service走進(jìn)了我們的視野并登堂入室。為了與傳統(tǒng)的基于SOAPWeb Service進(jìn)行區(qū)分,我們將后者稱為Web API。

很多人鼓吹SOAP已死,我個(gè)人對(duì)此持不同的看法。上面講的“重”與“輕”都是不帶任何感情色彩的中性詞,至于優(yōu)劣評(píng)價(jià)則決定于它們是否適合應(yīng)用的場(chǎng)景。到目前為止,對(duì)于企業(yè)級(jí)應(yīng)用之間的內(nèi)部集成互聯(lián),我覺(jué)得傳統(tǒng)的Web Service依然是最好的選擇。傳統(tǒng)WebService應(yīng)用的領(lǐng)域貌似在不斷被Web API占據(jù),但是后者并不能完全被視為前者的替代品,它只是讓“踩過(guò)界”的Web Service退回到它應(yīng)該堅(jiān)守的領(lǐng)地。WebServiceWeb API在各自適合的領(lǐng)域各司其職,形成一種理想的“路歸路、橋歸橋”的狀態(tài)。

Web ServiceWeb API的合理布局同樣也體現(xiàn)在微軟技術(shù)平臺(tái)上。WCF在過(guò)去是唯一的選擇,這是一個(gè)具有“SOAP”基因的通信平臺(tái),微軟后來(lái)利用擴(kuò)展讓它提供了針對(duì)REST的支持。正因?yàn)槿绱?,如果使?/span>WCF來(lái)構(gòu)建Web API的話,我們依然需要采用傳統(tǒng)的編程方式,Web API的“簡(jiǎn)單、快捷”完全得不到體現(xiàn)。微軟意識(shí)到在一個(gè)“重量級(jí)”通信框架上通過(guò)擴(kuò)展實(shí)現(xiàn)“輕量級(jí)”的通信,還不如重新構(gòu)建一個(gè)通信平臺(tái),于是ASP.NET Web API應(yīng)運(yùn)而生。

這不是一本傳統(tǒng)意義上的入門(mén)書(shū)籍

任何一本書(shū)都具有對(duì)應(yīng)的受眾群體,所以我不得不將這句話放在最前面,并且希望所有打算購(gòu)買(mǎi)此書(shū)的讀者能夠看到。如果你之前對(duì)ASP.NET Web API(或者ASP.NET MVC)完全沒(méi)有概念,在某一天突然被安排去開(kāi)發(fā)一個(gè)需要使用到ASP.NET Web API的項(xiàng)目,你希望有那么一本書(shū)能夠在一個(gè)星期或者更短的時(shí)間內(nèi)幫助你掌握ASP.NET Web API基本的編程方式,那么這本書(shū)不適合你。

我個(gè)人很喜歡金庸和古龍的武俠小說(shuō),我覺(jué)得學(xué)習(xí)某種開(kāi)發(fā)框架就像是練一門(mén)武功。一門(mén)武功具有“招式”和“心法”之分,外在的招式可以速成,而內(nèi)功心法絕非一蹴而就,但是沒(méi)有內(nèi)功心法支撐的招式只是花拳繡腿。對(duì)于某種開(kāi)發(fā)框架來(lái)說(shuō),基本的編程模式就是招式,框架本身的設(shè)計(jì)就是心法。

“訓(xùn)練招式”和“傳授心法”的書(shū)我們都需要,并且不能根據(jù)這點(diǎn)來(lái)評(píng)判一本書(shū)的優(yōu)劣。就本書(shū)而言,這是一本苦練內(nèi)功心法的書(shū)。對(duì)于大部分讀者來(lái)說(shuō),我覺(jué)得在很短的時(shí)間內(nèi)完全掌握本書(shū)的內(nèi)容并不是一件容易的事情,所以如果你沒(méi)有決定花較多的時(shí)間和精力閱讀此書(shū)的話,我還是建議你選擇其他相關(guān)的書(shū)籍。

我在《ASP.NET MVC 4框架揭秘》一書(shū)中寫(xiě)過(guò)這么一段話:掌握ASP.NET MVC具有三個(gè)層次,了解基本的編程模式為第一層次,能夠清晰認(rèn)識(shí)ASP.NET MVC框架本身從請(qǐng)求接收到響應(yīng)回復(fù)的整個(gè)流程為第二層次,最高的層次則是能夠靈活自由地利用ASP.NET MVC提供的擴(kuò)展點(diǎn)解決開(kāi)發(fā)過(guò)程的實(shí)際問(wèn)題。這句話同樣適用于針對(duì)ASP.NET WebAPI的學(xué)習(xí),本書(shū)寫(xiě)作的目的是使第一層次的讀者快速進(jìn)入第二層次和第三層次。

這是一本實(shí)用的書(shū)嗎

可能有人覺(jué)得這本講述ASP.NET Web API架構(gòu)設(shè)計(jì)和剖析框架運(yùn)行原理的書(shū)沒(méi)有什么“實(shí)際”的意義,因?yàn)槲覀兠刻斓娜粘9ぷ骶褪蔷幊?,知道?/span>ASP.NET Web API從請(qǐng)求接收到響應(yīng)回復(fù)之間的整個(gè)處理流程并不會(huì)對(duì)實(shí)際工作產(chǎn)生實(shí)質(zhì)性的改變。其實(shí)這種想法是極端錯(cuò)誤的,因?yàn)槲覀兙帉?xiě)的程序最終是在框架上運(yùn)行的,程序的高效性決定于它是否能夠最大限度地“迎合”框架的運(yùn)行機(jī)制,所以了解ASP.NET Web API框架的運(yùn)行原理有利于我們寫(xiě)出高質(zhì)量的程序。

常年以來(lái),我個(gè)人的主要工作就是維護(hù)和設(shè)計(jì)公司內(nèi)部的一個(gè)開(kāi)發(fā)框架。這是一個(gè)在集團(tuán)內(nèi)部廣泛采用的針對(duì).NET的開(kāi)發(fā)框架,它的存在使流水線式的軟件開(kāi)發(fā)成為可能,這個(gè)框架不僅僅提高了生產(chǎn)效率和產(chǎn)品質(zhì)量,還降低了對(duì)最終開(kāi)發(fā)人員技能的要求。之所以能夠做到這一點(diǎn),原因在于幾乎所有與業(yè)務(wù)無(wú)關(guān)的功能(比如日志、異常處理、權(quán)限控制、安全審核、事務(wù)處理等)都由這個(gè)框架來(lái)完成,最終的開(kāi)發(fā)人員只需要實(shí)現(xiàn)具體的業(yè)務(wù)邏輯就可以了。

對(duì)于這個(gè)開(kāi)發(fā)框架來(lái)說(shuō),針對(duì)相應(yīng)開(kāi)發(fā)技術(shù)所做的擴(kuò)展和工具是一個(gè)重要的組成部分,所以出于本職工作的需要,我不得不對(duì)采用的主流開(kāi)發(fā)技術(shù)進(jìn)行深入研究,因?yàn)橹挥性趯?duì)其內(nèi)部運(yùn)行原理了然于胸的情況下才能精準(zhǔn)地找到一個(gè)最適合的擴(kuò)展點(diǎn)來(lái)解決具體項(xiàng)目開(kāi)發(fā)過(guò)程中遇到的問(wèn)題。很多讀者都問(wèn)過(guò)我同樣一個(gè)問(wèn)題:“為什么你能夠了解那么多關(guān)于WCFASP.NET MVCASP.NET Web API這些技術(shù)的內(nèi)部細(xì)節(jié)?”我現(xiàn)在告訴你們答案:因?yàn)檫@是我本職工作的一部分。為了將這些實(shí)用的研究成果服務(wù)于更多的人,我將它們寫(xiě)到我的多本書(shū)中。

可以將本書(shū)當(dāng)成一本講述設(shè)計(jì)架構(gòu)的書(shū)來(lái)讀

在我的周?chē)嬖谥@樣一些人,這些人以剛畢業(yè)一兩年的大學(xué)生為主,他們大都工作勤奮、聰明好學(xué),手中經(jīng)常捧著GoF的《設(shè)計(jì)模式》,總是希望將書(shū)中的設(shè)計(jì)模式應(yīng)用到具體項(xiàng)目之中,或者希望通過(guò)項(xiàng)目的實(shí)踐來(lái)印證他們?cè)跁?shū)本上學(xué)到的設(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)能夠在很長(zhǎng)一段時(shí)間內(nèi)保持不變,本身就證明了應(yīng)用在上面的架構(gòu)設(shè)計(jì)的正確性,它們不正是我們學(xué)習(xí)架構(gòu)設(shè)計(jì)最好的素材嗎!

就我個(gè)人而言,很多設(shè)計(jì)架構(gòu)方面的知識(shí)都是近年來(lái)在深入研究WCFASP.NET MVC、ASP.NET Web API、EnterpriseLibraryUnity這些開(kāi)發(fā)技術(shù)和開(kāi)源框架的過(guò)程中獲取的。對(duì)于那些只會(huì)拿貓、狗這些東西舉例的設(shè)計(jì)模式的書(shū)籍來(lái)說(shuō),這些內(nèi)容是學(xué)不到的。本書(shū)除了介紹一些技術(shù)細(xì)節(jié),實(shí)際上還將ASP.NET Web API的整個(gè)架構(gòu)設(shè)計(jì)展現(xiàn)在了讀者面前,相信有心的讀者會(huì)從中學(xué)到不少關(guān)于架構(gòu)設(shè)計(jì)方面的知識(shí)。

如果你手頭剛好有一本《ASP.NET MVC 4框架揭秘》(《ASP.NETMVC 5框架揭秘》也即將出版),可以將這兩本書(shū)對(duì)照著一起看。對(duì)于相同的功能點(diǎn),認(rèn)真思考一下為何它們?cè)?/span>ASP.NET MVCASP.NET Web API中會(huì)采用不同的設(shè)計(jì),兩種設(shè)計(jì)孰優(yōu)孰劣,我想收獲會(huì)更大。

本書(shū)承載了個(gè)人針對(duì)新技術(shù)的學(xué)習(xí)方法

在過(guò)去幾年中,有些熱心的讀者和網(wǎng)友都向我咨詢過(guò)一個(gè)問(wèn)題:“對(duì)于一門(mén)新的技術(shù),如何能夠在短時(shí)間內(nèi)掌握其精髓”。這是一個(gè)學(xué)習(xí)方法的問(wèn)題,雖然我覺(jué)得每個(gè)人都有適合自己的學(xué)習(xí)方法,但我還是刻意地將我個(gè)人采用的方式體現(xiàn)在本書(shū)之中,希望它對(duì)某些讀者有用。如果讀者是個(gè)有心人,應(yīng)該可以看到我在介紹某個(gè)知識(shí)點(diǎn)的時(shí)候,不僅僅會(huì)告訴你“是什么”和“為什么”,還會(huì)告訴你“如何證明是這樣”。換句話說(shuō),我不僅僅將某個(gè)論點(diǎn)拋給你,還為你展現(xiàn)了整個(gè)論證的過(guò)程,實(shí)際上我在學(xué)習(xí)過(guò)程中就是這么做的。

本書(shū)的寫(xiě)作特點(diǎn)

本書(shū)具有一個(gè)與其他中文原創(chuàng)或者翻譯書(shū)籍截然不同的特點(diǎn),那就是幾乎所有的術(shù)語(yǔ)都采用英文,比如HttpController、ActionModel,在本書(shū)中并沒(méi)有翻譯成中文“HTTP控制器”、“操作”和“模型”。因?yàn)槲艺J(rèn)為很多術(shù)語(yǔ)其實(shí)很難找到一個(gè)語(yǔ)義完全等同的中文詞組或短語(yǔ)與之對(duì)應(yīng),對(duì)于習(xí)慣了將英文作為“開(kāi)發(fā)語(yǔ)言”的讀者來(lái)說(shuō),強(qiáng)行翻譯其實(shí)是不必要的。

除此之外,這不是一本純理論的書(shū),而是一本“實(shí)證型”的書(shū),在書(shū)中提供了120個(gè)可供單獨(dú)下載的實(shí)例。這些實(shí)例在本書(shū)中具有不同的作用,有的是為了探測(cè)和證明對(duì)應(yīng)的論點(diǎn),有的是為了演示所使用的某種編程技巧。

本書(shū)讀者

雖然這不是一本傳統(tǒng)意義上的入門(mén)書(shū)籍,但是我不會(huì)根據(jù)讀者的技能將某一部分人排除在本書(shū)的讀者之外。與市面上絕大部分同類(lèi)書(shū)籍相比,我寧愿說(shuō)這本書(shū)走得更遠(yuǎn)而不是鉆得更深,因?yàn)殡m然本書(shū)更加近距離地觸及了ASP.NET Web API框架內(nèi)核,但是涉及的內(nèi)容本身并沒(méi)有什么高深莫測(cè)之處,對(duì)于具有基本.NET基礎(chǔ)的讀者應(yīng)該都看得懂。所以我覺(jué)得本書(shū)適合那些對(duì)深層次了解ASP.NET Web API的開(kāi)發(fā)人員和架構(gòu)師,不論讀者處于怎樣的層次總會(huì)找到自己知識(shí)的“盲點(diǎn)”。

關(guān)于作者

蔣金楠(網(wǎng)名Artech),《WCF全面解析》(上、下冊(cè))、《ASP.NET MVC 4框架揭秘》《ASP.NETMVC 5框架揭秘》等多部暢銷(xiāo)IT圖書(shū)作者,現(xiàn)就職于一家知名軟件公司擔(dān)任高級(jí)軟件顧問(wèn)。擁有一個(gè)訪問(wèn)量超過(guò)200萬(wàn)的個(gè)人博客(http://www.cnblogs.com/artech),被評(píng)為2012年度51 CTO 十大杰出IT博客。2007~2013年被連續(xù)7次評(píng)為微軟MVP,同時(shí)也是少數(shù)幾個(gè)跨多領(lǐng)域(Solutions ArchitectConnectedSystem、Microsoft IntegrationASP.NET/IIS)的MVP之一。

致謝

本書(shū)得以出版,需要感謝本書(shū)的編輯張春雨和劉舫,他們的專(zhuān)業(yè)水準(zhǔn)和責(zé)任心為本書(shū)提供了質(zhì)量保證,多次合作產(chǎn)生的默契讓我對(duì)下次合作充滿期待。此外,最需要感謝的是我的妻子徐妍妍,只有我知道她在本書(shū)提交給出版社之前所做的校對(duì)工作有多么重要。

本書(shū)支持

本書(shū)針對(duì)最新版本的ASP.NET Web API,同時(shí)涉及太多底層實(shí)現(xiàn)的內(nèi)容,所以大部分內(nèi)容是找不到任何現(xiàn)成參考資料的,這些內(nèi)容大都來(lái)自于作者對(duì)源碼的分析和試驗(yàn)的證明。本書(shū)的最初版本是根據(jù)ASP.NET MVC Web API 2 Beta撰寫(xiě)的,后來(lái)微軟發(fā)布了正式版,然后作者根據(jù)正式版對(duì)原來(lái)的內(nèi)容進(jìn)行了大量改動(dòng)。這些因素加上作者自身能力的限制,都可能造成一些無(wú)法避免的錯(cuò)誤或者偏差,如果讀者在閱讀過(guò)程中發(fā)現(xiàn)了任何問(wèn)題,希望能夠反饋給我。如果讀者遇到任何ASP.NET MVC、ASP.NET Web API或者WCF的問(wèn)題,也歡迎與我通過(guò)以下方式進(jìn)行交流。

作者博客:http://www.cnblogs.com/artech

作者微博:http://www.weibo.com/artech

電子郵箱:jiangjinnan@gmail.com

微信公眾賬號(hào):Artech2981

本書(shū)的每一章節(jié)都會(huì)提供一系列實(shí)例演示,讀者可以根據(jù)編號(hào)(如S101、S202 等)從下載的源代碼壓縮包中找到對(duì)應(yīng)的實(shí)例。本書(shū)的附錄列出了可供下載的所有實(shí)例演示的列表和相關(guān)描述。源代碼的下載地址為:www.broadview.com.cn。

 

ASP.NET Web API 2框架揭秘

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI