ASP.NET Core 3框架揭秘
  • 推薦0
  • 收藏4
  • 瀏覽1.6K

ASP.NET Core 3框架揭秘

蔣金楠 (作者) 

  • 書  號:978-7-121-38462-2
  • 出版日期:2020-03-19
  • 頁  數:916
  • 開  本:16(185*235)
  • 出版狀態:上市銷售
  • 維護人:張春雨
紙質版 ¥199.00
本書主要闡述 ASP.NET Core 最核心的部分——請求處理管道。通過閱讀本書,讀者可以深刻系統地了解 ASP.NET Core 應用在啟動過程中管道的構建方式,以及請求在管道中的處理流程。本書還詳細講述了 .NET Core 跨平臺的本質,以及多個常用的基礎框架(如依賴注入、文件信息、配置選項和診斷日志等)。本書還對大部分原生的中間件提供了系統性介紹,采用“編程體驗”、“總體設計”、“具體實現”和“靈活運用”的流程,使讀者可以循序漸進地學習 ASP.NET Core 的每個功能模塊。本書可供所有 .NET 從業人員閱讀與參考。
.NET頭牌博主|首席專家五年磨礪 體驗-設計-實現-運用全線貫通 管道技術|基礎框架|原生中間件深度剖析
寫作源起
計算機圖書市場存在一系列介紹 ASP.NET Web Forms、ASP.NET MVC、ASP.NET Web API 的圖書,但是找不到一本專門介紹 ASP.NET 自身框架的圖書,作為一名擁有 17 年工作經驗的 .NET 開發者,筆者對此感到十分困惑。上述這些 Web 開發框架都是建立在 ASP.NET 底層框架之上的,底層 ASP.NET 框架才是根基所在。過去筆者接觸過很多資深的 ASP.NET 開發人員,發現他們對 ASP.NET 框架大都沒有進行深入了解。
2014 年,出版《ASP.NET MVC 5 框架揭秘》之后,筆者原本打算寫“ASP.NET 框架揭秘”。但在新書準備過程中,微軟推出了 ASP.NET Core(當時被稱為 ASP.NET 5,還沒有 .NET Core 的概念)。所以,筆者將研究重點轉移到 ASP.NET Core。
本書耗時 5 年左右,筆者投入了大量心血。2015 年年初,筆者開始了本書的寫作,微軟在2016 年 6 月正式發布 .NET Core 1.0 時,本書的絕大部分內容就已經完成。隨后,微軟不斷推出新的版本,本書的內容也在不斷快速“迭代”中。本書正文部分共計 800 多頁,但筆者在寫作過程中刪除的部分不少于這個數字。
有人認為自己每天只是做一些簡單的編程工作,根本沒有必要去了解底層原理和設計方面的內容。其實,不論我們從事何種層次的工作,最根本的目的只有一個——解決問題。解決方案分兩種:一種是“揚湯止沸”,另一種是“釜底抽薪”??吹藉伬锊粩喾序v的水,大多數人會選擇不斷地往鍋里澆冷水,筆者希望這本書能夠使讀者看到鍋底熊熊燃燒的薪火。
【本書內容】
ASP.NET Core 是一個全新的 Web 開發平臺,為我們構建了一個可復用和可定制的請求處理管道,微軟在它上面構建了 MVC、SignalR、GRPC、Orleans 這樣廣泛使用的 Web 框架,我們也可以利用它構建自己的 Web 框架(筆者曾經通過 ASP.NET Core 構建了一款 GraphQL 框架)。本書只關注最本質的東西,即 ASP.NET Core 請求處理管道,并不會涉及上述這些 Web 框架。本書的內容主要劃分為如下 4 個部分。
1.跨平臺的開發體現和實現原理
.NET Core 與傳統 .NET Framework 最大的區別是跨平臺,作為開篇入門材料,第 1 章通過幾個簡單的 Hello World 程序,讓讀者可以體驗如何在 Windows、macOS、Linux 平臺上開發 .NET Core 應用,以及通過 Docker 容器部署 ASP.NET Core 應用的樂趣。第 2 章將告訴讀者 .NET Core 的跨平臺究竟是如何實現的。
2.基礎框架
ASP.NET Core 框架依賴于一些基礎框架,其中最重要的是注入框架。由于依賴注入框架不但是構建 ASP.NET Core 請求處理管道的基石,而且依賴注入也是 ASP.NET Core 應用的基本編程模式,所以本書的第 3 章和第 4 章對依賴注入原理及依賴注入框架的設計與編程方式進行了詳細介紹。
ASP.NET Core 應用具有很多讀取文件內容的場景,所以它構建了一個抽象的文件系統,第 5 章會對這個文件系統的設計模型和兩種實現方式(物理文件系統和程序集內嵌文件系統)進行詳細介紹。
.NET Core 針對“配置”的支持是傳統 .NET 開發人員所不能想象的,所以采用兩章的篇幅對這一主題進行講解:第 6 章旨在介紹支持多種數據源的配置系統;不論是開發 ASP.NET Core應用還是組件,都可以采用 Options 模式來讀取配置選項,第 7 章會著重講述這種強類型的配置選項編程方式。
.NET Core 在錯誤診斷方面為我們提供了多種選擇,第 8 章介紹了 5 種常用的記錄診斷日志的方式。 .NET Core 還提供了一個支持多種輸出渠道的日志系統,該日志系統在第 9 章進行了詳細的介紹。
3.管道詳解
.NET Core 的服務承載系統用來承載那些需要長時間運行的服務,ASP.NET Core 作為最重要的服務類型被承載于該系統中,第 10 章會對該服務承載系統進行系統介紹。由于請求處理管道是本書的核心所在,所以采用 3 章的篇幅進行介紹:第 11 章主要從編程模型的角度來認識管道;第 12 章提供了一個極簡版的模擬框架來展示 ASP.NET Core 框架的總體設計;第 13 章以這個模擬框架為基礎,采用漸進的方式補充一些遺漏的細節,進而將 ASP.NET Core 框架真實的管道展現在讀者眼前。
4.中間件
ASP.NET Core 框架的請求處理管道由服務器和中間件組成,管道利用服務器來監聽和接收請求,并完成最終對請求的響應,應用針對請求的處理則體現在有序排列的中間件上。微軟為我們提供了一系列原生的中間件,對這些中間件的介紹全部在下冊。
這部分涉及用來處理文件請求(第 14 章)、路由(第 15 章)、異常(第 16 章)的中間件,也包括用來響應緩存(第 17 章)和會話(第 18 章)的中間件,還包括用來實現認證(第 19 章)、授權(第 20 章)、跨域資源共享(第 21 章)等與安全相關的中間件。
這部分還介紹了針對本地化(第 22 章)和健康檢查(第 23 章)的中間件。除此之外,這部分還介紹了用來實現主機名過濾、HTTP 重寫、設置基礎路徑等功能的中間件,這些零散的中間件全部在第 24 章進行介紹。
【寫作特點】
本書是揭秘系列的第 6 本書。在過去的十來年里,筆者得到了很多熱心讀者的反饋,這些反饋對書中的內容基本上都持正面評價,但對寫作技巧和表達方式的評價則不盡相同。每個作者都有屬于自己的寫作風格,每個讀者的學習思維方式也不盡相同,兩者很難出現百分之百的契合,但筆者還是決定在本書上做出改變。
本書內容采用了不一樣的組織方式,筆者認為這樣的方式更符合系統地學習一門全新技術的“流程”。對于每個模塊,筆者采用“體驗先行”的原則,提供一些簡單的實例演示,使讀者對當前模塊的基本功能特性和編程模式具有大致的了解。同時,在編程體驗中抽取一些核心對象,并利用它們構建當前模塊的抽象模型,使讀者只要讀懂了這個模型也就了解了當前模塊的總體設計。接下來我們從抽象轉向具體,進一步深入介紹抽象模型的實現原理。為了使讀者能夠在真實項目中靈活自如地運用當前模塊,筆者介紹了一些面向應用的擴展和最佳實踐??傮w來說,本書
采用“編程體驗”、“總體設計”、“具體實現”和“靈活運用”的流程,使讀者能循序漸進地學習ASP.NET Core 的每個功能模塊。
本書綜合運用 3 種不同的“語言”(文字語言、圖表語言和編程語言)來講述每個技術主題。
一圖勝千言,筆者在每章都精心設計了很多圖表,這些具象的圖表能夠幫助讀者理解技術模塊的總體設計、執行流程和交互方式。除了利用編程語言描述應用編程接口(API),本書還提供了近200 個實例,這些實例具有不同的作用,有的是為了演示某個實用的編程技巧或者最佳實踐,有的是為了強調一些容易忽視但很重要的技術細節,有的是為了探測和證明所述的論點。
本書在很多地方會展示一些類型的代碼,但是這些代碼和真正的源代碼是有差異的,兩者的差異緣于以下幾個原因:第一,源代碼在版本更替中一直在發生改變;第二,由于篇幅的限制,筆者刻意刪除了一些細枝末節的代碼,如針對參數的驗證、診斷日志的輸出和異常處理等;第三,很多源代碼其實都具有優化的空間。綜上所述,本書提供的代碼片段旨在揭示設計原理和實現邏輯,不是為了向讀者展示源代碼。
【目標讀者】
雖然本書關注的是 ASP.NET Core 自身框架提供的請求處理管道,而不是具體某個應用編程框架(如 MVC、SignalR、GRPC 等),但是本書適合所有 .NET 技術從業人員閱讀。
筆者認為任何好的設計都應該是簡單的,唯有簡單的設計才能應對后續版本更替中出現的復雜問題。從這個意義上講,ASP.NET 框架就是好的設計。因為自正式推出的那一刻起,ASP.NET 框架的總體設計基本上沒有發生改變。ASP.NET Core 的設計同樣是好的設計,其簡單的管道式設計在未來的版本更替中也不會發生太大的改變,既然是好的設計,它就應該是簡單的。
正如上面所說,本書采用漸進式的寫作方式,那些完全沒有接觸過 ASP.NET Core 的開發人員也可以通過本書深入、系統地掌握這門技術。由于本書提供的大部分內容都是獨一無二的,即使是資深的 .NET 開發設計人員,也能在書中找到很多不甚了解的盲點。
【關于作者】
蔣金楠,同程藝龍技術專家。知名 IT 博主(多年來一直排名博客園第一位),擁有個人微信公眾號“大內老 A”;2007—2018 年連續 12 次被評為微軟 MVP(最有價值專家),也是少數跨多領域(Solutions Architect、Connected System、Microsoft Integration 和 ASP.NET/IIS 等)的 MVP 之一;暢銷 IT 圖書作者,先后出版了《WCF 全面解析》、《ASP.NET MVC 4 框架揭秘》、《ASP.NETMVC 5 框架揭秘》和《ASP.NET Web API 2 框架揭秘》等著作。
【致謝】
本書得以順利出版離不開博文視點張春雨團隊的辛勤努力,他們的專業水準和責任心為本書提供了質量保證。此外,徐妍妍在本書寫作過程中做了大量的校對工作,在此表示衷心感謝。
【本書支持】
由于本書是隨著 ASP.NET Core 一起成長起來的,并且隨著 ASP.NET Core 的版本更替進行了多次“迭代”,所以書中某些內容最初是根據舊版本編寫的,新版本對應的內容發生改變后相應內容可能沒有及時更新。對于 ASP.NET Core 的每次版本升級,筆者基本上會盡可能將書中的內容做相應的更改,但其中難免有所疏漏。由于筆者的能力和時間有限,書中難免存在不足之處,懇請廣大讀者批評指正。

目錄

第 1 章 全新的開發體驗 ..................................................................................................................... 1
1.1 Windows 平臺 .......................................................................................................................... 1
1.1.1 構建開發環境 ............................................................................................................. 1
1.1.2 利用命令行創建 .NET Core 應用 ............................................................................. 2
1.1.3 ASP.NET Core 應用 .................................................................................................... 6
1.1.4 ASP.NET Core MVC 應用 ........................................................................................ 13
1.2 macOS 用戶 ............................................................................................................................ 17
1.2.1 構建開發環境 ........................................................................................................... 17
1.2.2 利用命令行創建 .NET Core 應用 ........................................................................... 17
1.2.3 ASP.NET Core MVC 應用 ........................................................................................ 18
1.3 Linux ....................................................................................................................................... 19
1.3.1 啟用 Linux 子系統 .................................................................................................... 20
1.3.2 構建開發環境 ........................................................................................................... 22
1.3.3 利用命令行創建 ASP.NET Core 應用 ..................................................................... 22
1.4 Docker .................................................................................................................................... 24
第 2 章 跨平臺的奧秘 ....................................................................................................................... 27
2.1 歷史的枷鎖 ............................................................................................................................ 27
2.1.1 Windows 下的 .NET ................................................................................................. 27
2.1.2 非 Windows 下的 .NET ............................................................................................ 31
2.2 復用之傷 ................................................................................................................................ 34
2.2.1 源代碼復用 ............................................................................................................... 34
2.2.2 程序集復用 ............................................................................................................... 36
2.3 全新的布局 ............................................................................................................................. 44
2.3.1 跨平臺的 .NET Core ................................................................................................ 44
2.3.2 統一的 BCL ............................................................................................................... 51
2.3.3 展望未來 .................................................................................................................... 56
第 3 章 依賴注入(上篇) ............................................................................................................... 58
3.1 控制反轉................................................................................................................................. 58
3.1.1 流程控制的反轉 ........................................................................................................ 58
3.1.2 好萊塢法則 ................................................................................................................ 61
3.1.3 流程定制 .................................................................................................................... 62
3.2 IoC 模式.................................................................................................................................. 62
3.2.1 模板方法 .................................................................................................................... 63
3.2.2 工廠方法 .................................................................................................................... 64
3.2.3 抽象工廠 .................................................................................................................... 66
3.3 依賴注入................................................................................................................................. 68
3.3.1 由容器提供對象 ........................................................................................................ 68
3.3.2 3 種依賴注入方式 ..................................................................................................... 69
3.3.3 Service Locator 模式 ................................................................................................. 72
3.4 一個簡易版的依賴注入容器 ................................................................................................. 74
3.4.1 編程體驗 .................................................................................................................... 74
3.4.2 設計與實現 ................................................................................................................ 79
3.4.3 擴展方法 .................................................................................................................... 85
第 4 章 依賴注入(下篇) ............................................................................................................... 89
4.1 利用容器提供服務 ................................................................................................................. 89
4.1.1 服務的注冊與消費 .................................................................................................... 89
4.1.2 生命周期 .................................................................................................................... 93
4.1.3 針對服務注冊的驗證 ................................................................................................ 96
4.2 服務注冊................................................................................................................................. 99
4.2.1 ServiceDescriptor ....................................................................................................... 99
4.2.2 IServiceCollection .................................................................................................... 101
4.3 服務的消費 ........................................................................................................................... 105
4.3.1 IServiceProvider ....................................................................................................... 105
4.3.2 服務實例的創建 ...................................................................................................... 106
4.3.3 生命周期 .................................................................................................................. 109
4.4 實現概覽 .............................................................................................................................. 113
4.4.1 ServiceProviderEngine 和 ServiceProviderEngineScope ........................................ 113
4.4.2 ServiceProvider ........................................................................................................ 115
4.4.3 注入 IServiceProvider 對象 ..................................................................................... 117
4.5 擴展 ...................................................................................................................................... 119
4.5.1 適配 ......................................................................................................................... 120
4.5.2 IServiceProviderFactory ........................................................ 120
4.5.3 整合第三方依賴注入框架 ...................................................................................... 121
第 5 章 文件系統 ............................................................................................................................. 126
5.1 抽象的文件系統 .................................................................................................................. 126
5.1.1 樹形層次結構 ......................................................................................................... 126
5.1.2 讀取文件內容 ......................................................................................................... 128
5.1.3 監控文件的變化 ..................................................................................................... 130
5.2 設計詳解 .............................................................................................................................. 131
5.2.1 IChangeToken .......................................................................................................... 132
5.2.2 IFileProvider ............................................................................................................ 133
5.2.3 PhysicalFileProvider ................................................................................................ 135
5.2.4 EmbeddedFileProvider ............................................................................................ 139
5.2.5 兩個特殊的 IFileProvider 實現 .............................................................................. 144
5.3 遠程文件系統 ...................................................................................................................... 147
5.3.1 HttpFileInfo 與 HttpDirectoryContents ................................................................... 147
5.3.2 HttpFileProvider ...................................................................................................... 150
5.3.3 FileProviderMiddleware .......................................................................................... 151
5.3.4 遠程文件系統的應用 .............................................................................................. 153
第 6 章 配置選項(上篇) ............................................................................................................ 155
6.1 讀取配置信息 ...................................................................................................................... 155
6.1.1 配置編程模型三要素 .............................................................................................. 155
6.1.2 以鍵值對的形式讀取配置 ...................................................................................... 156
6.1.3 讀取結構化的配置 .................................................................................................. 157
6.1.4 將結構化配置直接綁定為對象 .............................................................................. 160
6.1.5 將配置定義在文件中 .............................................................................................. 161
6.2 配置模型 .............................................................................................................................. 165
6.2.1 數據結構及其轉換 .................................................................................................. 166
6.2.2 IConfiguration .......................................................................................................... 167
6.2.3 IConfigurationProvider ............................................................................................ 169
6.2.4 IConfigurationSource ............................................................................................... 171
6.2.5 IConfigurationBuilder .............................................................................................. 171
6.3 配置綁定............................................................................................................................... 172
6.3.1 綁定配置項的值 ...................................................................................................... 173
6.3.2 綁定復合數據類型 .................................................................................................. 175
6.3.3 綁定集合對象 .......................................................................................................... 177
6.3.4 綁定字典 .................................................................................................................. 180
6.4 配置的同步 ........................................................................................................................... 181
6.4.1 配置數據流 .............................................................................................................. 181
6.4.2 ConfigurationReloadToken ...................................................................................... 182
6.4.3 ConfigurationRoot .................................................................................................... 183
6.4.4 ConfigurationSection ............................................................................................... 185
6.5 多樣性的配置源 ................................................................................................................... 186
6.5.1 MemoryConfigurationSource ................................................................................... 187
6.5.2 EnvironmentVariablesConfigurationSource ............................................................. 188
6.5.3 CommandLineConfigurationSource ........................................................................ 191
6.5.4 FileConfigurationSource .......................................................................................... 194
6.5.5 StreamConfigurationSource ..................................................................................... 207
6.5.6 ChainedConfigurationSource ................................................................................... 208
6.5.7 自定義 ConfigurationSource(S616) ................................................................... 210
第 7 章 配置選項(下篇) ............................................................................................................. 215
7.1 Options 模式 ......................................................................................................................... 215
7.1.1 將配置綁定為 Options 對象 ................................................................................... 215
7.1.2 提供具名的 Options ................................................................................................ 217
7.1.3 配置源的同步 .......................................................................................................... 219
7.1.4 直接初始化 Options 對象 ....................................................................................... 221
7.1.5 根據依賴服務的 Options 設置 ............................................................................... 223
7.1.6 驗證 Options 的有效性 ........................................................................................... 225
7.2 Options 模型 ......................................................................................................................... 226
7.2.1 OptionsManager ................................................................................... 226
7.2.2 IOptionsFactory .................................................................................... 228
7.2.3 IOptionsMonitorCache ......................................................................... 237
7.2.4 IOptionsMonitor ................................................................................... 238
7.3 依賴注入 .............................................................................................................................. 240
7.3.1 服務注冊 ................................................................................................................. 240
7.3.2 IOptions與 IOptionsSnapshot ........................................... 246
7.3.3 擴展與定制 ............................................................................................................. 248
7.3.4 集成配置系統 ......................................................................................................... 256
第 8 章 診斷日志(上篇) ............................................................................................................ 258
8.1 各種診斷日志形式 .............................................................................................................. 258
8.1.1 調試日志 ................................................................................................................. 258
8.1.2 跟蹤日志 ................................................................................................................. 259
8.1.3 事件日志 ................................................................................................................. 262
8.1.4 診斷日志 ................................................................................................................. 265
8.2 Debugger 調試日志 .............................................................................................................. 268
8.2.1 Debugger .................................................................................................................. 268
8.2.2 Debug ....................................................................................................................... 270
8.3 TraceSource 跟蹤日志 ......................................................................................................... 271
8.3.1 跟蹤日志模型三要素 .............................................................................................. 271
8.3.2 預定義 TraceListener............................................................................................... 280
8.3.3 Trace ........................................................................................................................ 284
8.4 EventSource 事件日志 ......................................................................................................... 287
8.4.1 EventSource ............................................................................................................. 287
8.4.2 EventListener ........................................................................................................... 294
8.4.3 荷載對象序列化 ..................................................................................................... 298
8.4.4 活動跟蹤 ................................................................................................................. 302
8.4.5 性能計數 ................................................................................................................. 306
8.5 DiagnosticSource 診斷日志 ................................................................................................. 308
8.5.1 標準的觀察者模式 .................................................................................................. 308
8.5.2 AnonymousObserver ........................................................................................ 310
8.5.3 強類型的事件訂閱 .................................................................................................. 313
8.5.4 針對活動的跟蹤 ..................................................................................................... 315
第 9 章 診斷日志(下篇) ............................................................................................................ 317
9.1 統一日志編程模式 .............................................................................................................. 317
9.1.1 將日志輸出到不同的渠道 ...................................................................................... 317
9.1.2 日志過濾 .................................................................................................................. 323
9.1.3 日志范圍 .................................................................................................................. 329
9.1.4 LoggerMessage ........................................................................................................ 331
9.2 日志模型詳解 ....................................................................................................................... 334
9.2.1 日志模型三要素 ...................................................................................................... 334
9.2.2 ILogger ..................................................................................................................... 335
9.2.3 日志范圍 .................................................................................................................. 339
9.2.4 ILoggerProvider ....................................................................................................... 342
9.2.5 ILoggerFactory ......................................................................................................... 342
9.2.6 LoggerMessage ........................................................................................................ 347
9.3 依賴注入............................................................................................................................... 348
9.3.1 服務注冊 .................................................................................................................. 349
9.3.2 設置日志過濾規則 .................................................................................................. 351
9.4 日志輸出渠道 ....................................................................................................................... 353
9.4.1 控制臺 ...................................................................................................................... 353
9.4.2 調試器 ...................................................................................................................... 357
9.4.3 TraceSource 日志 ..................................................................................................... 359
9.4.4 EventSource 日志 .................................................................................................... 362
第 10 章 承載系統 ........................................................................................................................... 377
10.1 服務承載 ............................................................................................................................. 377
10.1.1 承載長時間運行服務 ............................................................................................ 377
10.1.2 依賴注入 ................................................................................................................ 379
10.1.3 配置選項 ................................................................................................................ 382
10.1.4 承載環境 ................................................................................................................ 385
10.1.5 日志 ........................................................................................................................ 388
10.2 承載模型 ............................................................................................................................. 391
10.2.1 IHostedService ....................................................................................................... 392
10.2.2 IHost ....................................................................................................................... 392
10.2.3 IHostBuilder ........................................................................................................... 397
10.3 實現原理 ............................................................................................................................. 402
10.3.1 服務宿主 ................................................................................................................ 403
10.3.2 針對配置系統的設置 ............................................................................................ 406
10.3.3 針對依賴注入框架的設置 .................................................................................... 407
10.3.4 創建宿主 ............................................................................................................... 412
10.3.5 靜態類型 Host ....................................................................................................... 418
第 11 章 管道(上篇) ................................................................................................................... 421
11.1 管道式的請求處理 ............................................................................................................. 421
11.1.1 兩個承載體系 ........................................................................................................ 421
11.1.2 請求處理管道 ........................................................................................................ 423
11.1.3 中間件 .................................................................................................................... 424
11.1.4 定義強類型中間件 ................................................................................................ 427
11.1.5 按照約定定義中間件 ............................................................................................ 428
11.2 依賴注入 ............................................................................................................................ 430
11.2.1 服務注冊 ................................................................................................................ 430
11.2.2 服務的消費 ............................................................................................................ 433
11.2.3 生命周期 ................................................................................................................ 437
11.2.4 集成第三方依賴注入框架 .................................................................................... 443
11.3 配置 .................................................................................................................................... 444
11.3.1 初始化配置 ............................................................................................................ 444
11.3.2 以鍵值對形式讀取和修改配置 ............................................................................ 446
11.3.3 合并配置 ................................................................................................................ 448
11.3.4 注冊 IConfigurationSource .................................................................................... 449
11.4 承載環境 ............................................................................................................................ 450
11.4.1 IWebHostEnvironment ........................................................................................... 450
11.4.2 通過配置定制承載環境 ........................................................................................ 452
11.4.3 針對環境的編程 .................................................................................................... 454
11.5 初始化 ................................................................................................................................ 459
11.5.1 Startup .................................................................................................................... 459
11.5.2 IHostingStartup ...................................................................................................... 461
11.5.3 IStartupFilter .......................................................................................................... 464
第 12 章 管道(中篇) .................................................................................................................. 467
12.1 中間件委托鏈 .................................................................................................................... 467
12.1.1 HttpContext ............................................................................................................ 467
12.1.2 中間件 ................................................................................................................... 468
12.1.3 中間件管道的構建 ................................................................................................ 469
12.2 服務器................................................................................................................................. 470
12.2.1 IServer .................................................................................................................... 471
12.2.2 針對服務器的適配 ................................................................................................ 471
12.2.3 HttpListenerServer ................................................................................................. 473
12.3 承載服務 ............................................................................................................................. 476
12.3.1 WebHostedService ................................................................................................. 476
12.3.2 WebHostBuilder ..................................................................................................... 476
12.3.3 應用構建 ................................................................................................................ 478
第 13 章 管道(下篇) ................................................................................................................... 480
13.1 請求上下文 ......................................................................................................................... 480
13.1.1 HttpContext ............................................................................................................ 480
13.1.2 服務器適配 ............................................................................................................ 483
13.1.3 獲取上下文 ............................................................................................................ 487
13.1.4 上下文的創建與釋放 ............................................................................................ 488
13.1.5 RequestServices ..................................................................................................... 489
13.2 IServer + IHttpApplication ................................................................................................. 491
13.2.1 IServer .................................................................................................................... 491
13.2.2 HostingApplication ................................................................................................ 492
13.2.3 診斷日志 ................................................................................................................ 495
13.3 中間件委托鏈 ..................................................................................................................... 501
13.3.1 IApplicationBuilder ................................................................................................ 501
13.3.2 弱類型中間件 ........................................................................................................ 504
13.3.3 強類型中間件 ........................................................................................................ 507
13.3.4 注冊中間件 ............................................................................................................ 509
13.4 應用的承載 ......................................................................................................................... 510
13.4.1 GenericWebHostServiceOptions ............................................................................ 510
13.4.2 GenericWebHostService ........................................................................................ 512
13.4.3 GenericWebHostBuilder ........................................................................................ 515
13.4.4 ConfigureWebHostDefaults ................................................................................... 530
附錄 A 實例演示 .............................................................................................................................. 533
第 14 章 靜態文件 ........................................................................................................................... 537
14.1 搭建文件服務器 ................................................................................................................ 537
14.1.1 發布物理文件 ....................................................................................................... 537
14.1.2 呈現目錄結構 ....................................................................................................... 540
14.1.3 顯示默認頁面 ....................................................................................................... 541
14.1.4 映射媒體類型 ....................................................................................................... 544
14.2 處理文件請求 .................................................................................................................... 545
14.2.1 條件請求 ............................................................................................................... 545
14.2.2 區間請求 ............................................................................................................... 549
14.2.3 StaticFileMiddleware ............................................................................................. 552
14.3 處理目錄請求 .................................................................................................................... 563
14.3.1 DirectoryBrowserMiddleware ............................................................................... 563
14.3.2 DefaultFilesMiddleware......................................................................................... 567
第 15 章 路由 ................................................................................................................................... 571
15.1 路由映射 ............................................................................................................................ 571
15.1.1 路由注冊 ............................................................................................................... 571
15.1.2 設置內聯約束 ....................................................................................................... 574
15.1.3 默認路由參數 ....................................................................................................... 576
15.1.4 特殊的路由參數.................................................................................................... 578
15.2 終結點的解析與執行 ........................................................................................................ 580
15.2.1 路由模式 ............................................................................................................... 580
15.2.2 終結點 ................................................................................................................... 586
ASP.NET Core 3 框架揭秘(下冊) X
15.2.3 中間件 .................................................................................................................... 593
15.3 路由約束 ............................................................................................................................. 599
15.3.1 預定義的 IRouteConstraint ................................................................................... 600
15.3.2 InlineConstraintResolver ........................................................................................ 602
15.3.3 自定義約束 ............................................................................................................ 603
第 16 章 異常處理 ........................................................................................................................... 607
16.1 呈現錯誤信息 ..................................................................................................................... 607
16.1.1 顯示開發者異常頁面 ............................................................................................ 607
16.1.2 顯示定制異常頁面 ................................................................................................ 610
16.1.3 針對響應狀態碼定制錯誤頁面 ............................................................................ 612
16.2 開發者異常頁面 ................................................................................................................. 615
16.2.1 IDeveloperPageExceptionFilter ............................................................................. 616
16.2.2 顯示編譯異常信息 ................................................................................................ 617
16.2.3 DeveloperExceptionPageMiddleware .................................................................... 622
16.3 異常處理器 ......................................................................................................................... 624
16.3.1 ExceptionHandlerMiddleware ............................................................................... 624
16.3.2 異常的傳遞與請求路徑的恢復 ............................................................................ 626
16.3.3 清除緩存 ................................................................................................................ 629
16.4 響應狀態碼頁面 ................................................................................................................. 631
16.4.1 StatusCodePagesMiddleware ................................................................................. 632
16.4.2 阻止處理異常 ........................................................................................................ 632
16.4.3 注冊 StatusCodePagesMiddleware 中間件 ........................................................... 635
第 17 章 緩存 ................................................................................................................................... 642
17.1 將數據緩存起來 ................................................................................................................. 642
17.1.1 將數據緩存在內存中 ............................................................................................ 642
17.1.2 對數據進行分布式緩存 ........................................................................................ 644
17.1.3 緩存整個 HTTP 響應 ............................................................................................ 648
17.2 本地內存緩存 ..................................................................................................................... 651
17.2.1 ICacheEntry ........................................................................................................... 651
17.2.2 MemoryCacheEntryOptions ................................................................................... 654
17.2.3 IMemoryCache ....................................................................................................... 655
17.3 分布式緩存 ......................................................................................................................... 663
17.3.1 IDistributedCache .................................................................................................. 664
17.3.2 基于 Redis 的分布式緩存 ..................................................................................... 665
17.3.3 基于 SQL Server 的分布式緩存 ........................................................................... 668
17.4 響應緩存 ............................................................................................................................ 670
17.4.1 HTTP/1.1 Caching ................................................................................................. 670
17.4.2 ResponseCachingMiddleware 中間件 ................................................................... 673
17.4.3 注冊中間件 ........................................................................................................... 680
第 18 章 會話 ................................................................................................................................... 681
18.1 利用會話保留“語境” .................................................................................................... 681
18.1.1 設置和提取會話狀態 ............................................................................................ 681
18.1.2 查看存儲的會話狀態 ............................................................................................ 683
18.1.3 查看 Cookie ........................................................................................................... 685
18.2 會話狀態的讀寫 ................................................................................................................ 686
18.2.1 ISession .................................................................................................................. 686
18.2.2 DistributedSession ................................................................................................. 687
18.2.3 ISessionStore ......................................................................................................... 688
18.3 SessionMiddleware 中間件 ................................................................................................ 689
18.3.1 SessionOptions ....................................................................................................... 689
18.3.2 ISessionFeature ...................................................................................................... 690
18.3.3 SessionMiddleware ................................................................................................ 691
第 19 章 認證 ................................................................................................................................... 694
19.1 認證、登錄與注銷 ............................................................................................................ 694
19.1.1 認證票據 ............................................................................................................... 694
19.1.2 基于 Cookie 的認證 .............................................................................................. 695
19.1.3 應用主頁 ............................................................................................................... 696
19.1.4 登錄與注銷 ........................................................................................................... 698
19.2 身份與用戶 ........................................................................................................................ 700
19.2.1 IIdentity .................................................................................................................. 700
19.2.2 IPrincipal ................................................................................................................ 707
19.3 認證模型 ............................................................................................................................ 710
19.3.1 認證票據 ............................................................................................................... 710
19.3.2 認證處理器 ........................................................................................................... 713
19.3.3 認證服務 ................................................................................................................ 720
19.3.4 服務注冊 ................................................................................................................ 724
19.3.5 AuthenticationMiddleware ..................................................................................... 727
19.4 Cookie 認證方案 ................................................................................................................ 729
19.4.1 AuthenticationHandler ........................................................................ 729
19.4.2 CookieAuthenticationHandler ................................................................................ 735
19.4.3 注冊 CookieAuthenticationHandler ....................................................................... 744
第 20 章 授權 ................................................................................................................................... 747
20.1 基于角色的權限控制 ......................................................................................................... 747
20.1.1 用戶與角色的映射 ................................................................................................ 747
20.1.2 根據角色授權 ........................................................................................................ 750
20.1.3 預定義授權策略 .................................................................................................... 754
20.2 基于“要求”的授權 ......................................................................................................... 756
20.2.1 IAuthorizationRequirement .................................................................................... 756
20.2.2 預定義的 IAuthorizationRequirement 實現類型 .................................................. 758
20.2.3 授權檢驗 ................................................................................................................ 762
20.3 基于“策略”的授權 ......................................................................................................... 767
20.3.1 授權策略的構建 .................................................................................................... 768
20.3.2 授權策略的注冊 .................................................................................................... 769
20.3.3 授權檢驗 ................................................................................................................ 770
第 21 章 跨域資源共享 ................................................................................................................... 773
21.1 處理跨域資源 ..................................................................................................................... 773
21.1.1 跨域調用 API ........................................................................................................ 773
21.1.2 資源提供者顯式授權 ............................................................................................ 777
21.1.3 基于策略的資源授權 ............................................................................................ 779
21.2 CORS 規范 ......................................................................................................................... 780
21.2.1 同源策略 ................................................................................................................ 781
21.2.2 針對資源的授權 .................................................................................................... 781
21.2.3 獲取授權的方式 .................................................................................................... 782
21.2.4 用戶憑證 ................................................................................................................ 785
21.3 CORS 模型 ......................................................................................................................... 785
21.3.1 CORS 策略 ............................................................................................................ 786
21.3.2 解析并應用授權結果 ............................................................................................ 788
21.3.3 CorsMiddleware 中間件 ........................................................................................ 790
第 22 章 本地化 ............................................................................................................................... 793
22.1 提供本地化消息文本 ........................................................................................................ 793
22.1.1 提供對應語種的文本 ............................................................................................ 793
22.1.2 自動設置語言文化 ................................................................................................ 795
22.1.3 將本地化文本分而治之 ........................................................................................ 798
22.1.4 直接注入 IStringLocalizer.............................................................................. 800
22.2 文本本地化 ........................................................................................................................ 801
22.2.1 字符串本地化模型 ................................................................................................ 801
22.2.2 基于 JSON 文件的本地化 .................................................................................... 804
22.2.3 基于資源文件的本地化 ........................................................................................ 810
22.3 當前語言文化的設置 ........................................................................................................ 814
22.3.1 Culture 與 UICulture ............................................................................................. 814
22.3.2 IRequestCultureProvider ........................................................................................ 815
22.3.3 RequestLocalizationOptions .................................................................................. 820
22.3.4 RequestLocalizationMiddleware............................................................................ 821
第 23 章 健康檢查 ........................................................................................................................... 822
23.1 檢查應用的健康狀況 ........................................................................................................ 822
23.1.1 確定當前應用是否可用 ........................................................................................ 822
23.1.2 定制健康檢查邏輯 ................................................................................................ 823
23.1.3 改變響應狀態碼.................................................................................................... 825
23.1.4 細粒度的健康檢查 ................................................................................................ 826
23.1.5 定制響應內容 ....................................................................................................... 828
23.1.6 過濾 IHealthCheck 對象 ....................................................................................... 830
23.2 設計與實現 ........................................................................................................................ 832
23.2.1 IHealthCheck ......................................................................................................... 832
23.2.2 HealthCheckService ............................................................................................... 838
23.2.3 HealthCheckMiddleware ....................................................................................... 842
23.2.4 針對 Entity Framework Core 的健康檢查 ............................................................ 846
23.3 發布健康報告 .................................................................................................................... 850
23.3.1 定期發布健康報告 ................................................................................................ 850
23.3.2 IHealthCheckPublisher........................................................................................... 851
23.3.3 HealthCheckPublisherHostedService ..................................................................... 852
第 24 章 補遺 ................................................................................................................................... 856
24.1 過濾主機名 ......................................................................................................................... 856
24.1.1 實例演示 ................................................................................................................ 856
24.1.2 配置選項 ................................................................................................................ 857
24.1.3 HostFilteringMiddleware 中間件 .......................................................................... 858
24.2 HTTP 重寫 .......................................................................................................................... 859
24.2.1 實例演示 ................................................................................................................ 859
24.2.2 HttpMethodOverrideMiddleware 中間件 .............................................................. 863
24.2.3 ForwardedHeadersMiddleware 中間件 ................................................................. 864
24.3 基礎路徑 ............................................................................................................................. 872
24.3.1 實例演示 ................................................................................................................ 873
24.3.2 UsePathBaseMiddleware ....................................................................................... 874
24.4 路由 .................................................................................................................................... 876
24.4.1 實例演示 ................................................................................................................ 876
24.4.2 MapMiddleware ..................................................................................................... 878
24.4.3 MapWhenMiddleware ............................................................................................ 880
附錄 B 實例演示 .............................................................................................................................. 882

讀者評論

相關圖書

程序員修煉之道:通向務實的最高境界(第2版)

THOMAS, DAVID; HUNT, ANDREW (作者)

《程序員修煉之道》之所以在全球范圍內廣泛傳播,被一代代開發者奉為圭臬,蓋因它可以創造出真正的價值:或編寫出更好的軟件,或探究出編程的本質,而所有收獲均不依賴于特...

¥89.00

Java持續交付

Daniel Bryant (作者) 張若飛 (譯者)

隨著Java 8的發布,以及Spring引導等web/微服務框架的可用性,設計和實現Java驅動的應用程序從來都不是一個更好的時機。但是,在不斷向生產環境交付工...

¥119.00

讀故事學編程——Python王國歷險記(雙色)

李偉 (作者)

這是一本故事書,也是一本編程書。<br>小男孩派森無意中闖入神秘國度—Python 王國,恰好遇到了國王的鸚鵡,于是他們開始了奇幻的冒險之旅。在這個過程中,他們...

¥69.00

21天學通HTML5+CSS3(第2版)

張啟玉 劉剛 (作者)

本書全面、系統、深入地講解了HTML5+CSS3網頁設計與編程的基礎知識與高級應用。在講解過程中,通過大量取自實際操作的案例,將網頁開發知識全面、系統、深入地呈...

¥89.90

尋聲記:Scratch 3.0趣味編程之旅(全彩)

王曉輝 (作者)

本書是一本編程故事書,以Scratch 3.0作為編程設計工具,圍繞一只小貓“喵喵呱” 找回叫聲的故事展開全書內容。  <br>本書包含9章共27節,通篇注重情...

¥69.00

Java編程方法論:響應式RxJava與代碼設計實戰

知秋(李飛) 李飛 (作者)

本書對RxJava 2的源碼進行了深入解讀,讓讀者可以從設計到實現細節上全面了解它,從而達到不僅會用而且可以進行RxJava 2源碼庫組件級別的拓展的程度。本書...

 
国际官方棋牌下载中心 加拿大快乐8开奖时间 大乐透复式计算器 tianjin快乐10分开奖 股票分析 大数据 808彩票网 601877股票行情 福建11选五5前3走势图 北京赛车 官方app下载 青海快三开奖历史开奖 上海配资炒股