ASP.NET Core 真機拆解
內容描述
對於讀者來說,學習ASP.NET Core就像學習使用一部新手機。
手機內部組成結構可能有改變,各個元器件的性能可能有提升,元器件之間的兼容性可能更好。
但在操作方式上,用戶除了要學習如何使用個別的新功能以及適應系統更快的反應速度外,並沒有太多改變。
基於以上,本書內容主要分為三部分。
第一部分是ASP.NET Core的使用說明,簡要介紹如何使用ASP.NET Core創建項目及其與ASP.NET 4.x的不同點;
第二部分是真機拆解,講解ASP.NET Core框架的內部運行邏輯;
第三部分是通過一個項目案例回顧全書知識點,並介紹如何在ASP.NET Core中對用戶進行認證和授權。
目錄大綱
目錄:
第1章ASP.NET Core介紹1
1.1為什麼要使用ASP.NET Core 1
1.2如何跨平台1
第2章開發環境準備4
2.1概述4
2.2 Windows環境下Visual Studio的安裝4
2.3 macOS環境下Visual Studio的安裝5
第3章項目結構6
3.1新建項目6
3.2項目結構詳解7
3.2.1 launchSettings.json 7
3.2.2 wwwroot 9
3.2.3框架9
3.2.4 _Layout.cshtml 11
3.2.5 _ValidationScriptsPartial.cshtml 11
3.2.6 _ViewImports.cshtml 12
3.2.7 _ViewStart.cshtml 13
3.2.8 appsettings.json和appsettings.Development.json 14
3.2.9 Program.cs 14
3.2. 10 Startup.cs 15
第4章_Layout與_ViewStart 17
4.1 _Layout的應用17
4.2 _ViewStart的應用20
4.3頁面的加載順序20
第5章TagHelper 22
5.1概述22
5.2自定義TagHelper 24
5.3 TagHelper的註冊25
5.4 TagHelper的作用範圍25
5.5自定義標籤27
5.6 TagHelper與頁面之間的數據傳遞28
5.7取消標籤輸出29
5.8 TagBuilder 29
第6章應用的跨平台部署31
6.1概述31
6.2在CentOS中安裝ASP.NET Core環境31
6.3在Windows上用Visual Studio發布項目32
6.4項目運行測試32
6.5創建service管理應用33
6.6安裝Nginx 34
6.7 SSL免費證書申請34
6.8多網站及證書配置36
6.9啟用ForwardedHeaders中間件38
6.10獨立部署(SCD) 39
第7章架構概覽40
7.1 ASP.NET Core的運行機制40
7.2 ASP.NET Core Application的架構41
7.3對HTTP/2的支持41
7.3.1 Kestrel 41
7.3.2 IIS(進程內) 41
7.4 ASP.NET Core的環境變量42
第8章應用啟動43
8.1概述43
8.2 HostBuilder的創建與配置45
8.2.1 Host的創建者HostBuilder 45
8.2.2 GenericWebHostBuilder 50
8.2.3處理Startup文件53
8.3 Host的構建57
8.4 Host的啟動63
第9章後台服務66
9.1應用場景66
9.2實現方式66
9.2.1實現IHostedService接口67
9.2.2在依賴注入中註冊這個服務68
9.3採用BackgroundService派生類的方式68
9.4注意事項70
第10章依賴注入71
10.1為什麼要用依賴注入71
10.2容器的構建和規則73
10.3 ASP.NET Core的依賴注入74
10.3.1 IServiceCollection 75
10.3.2 ServiceDescriptor 76
10.3.3 IServiceProvider 76
10.3.4 IServiceScope 77
10.4實例獲取方法及需要注意的問題77
10.5服務的Dispose 80
10.6更換容器81
第11章日誌82
11.1內置日誌的使用82
11.2使用NLog將日誌輸出到文件83
11.3注意事項84
11.4 NLog配置簡要說明85
第12章應用的配置86
12.1常見的配置方式86
12.1.1文件方式86
12.1.2目錄和文件89
12.1.3命令行89
12.1.4環境變量90
12.1.5內存對象91
12.2內部處理機制解析92
12.2.1數據源的註冊92
12.2.2數據源的加載99
12.2.3配置的讀取101
12.2.4配置的更新106
12.2.5配置的綁定106
第13章配置的Options模式108
13.1 Options的使用108
13.1.1簡單的不為Option命名的方式108
13.1.2為Option命名的方式109
13.1.3 Option的自動更新與生命週期110
13.1.4數據更新提醒111
13.1.5其他配置方式112
13.2內部處理機制解析113
13.2.1系統啟動階段的依賴注入113
13.2.2 Options值的獲取116
第14章請求處理管道121
14.1概述121
14.2請求在管道中的處理流程122
14.2.1簡單的中間件例子122
14.2.2請求是如何經過各個中間件的122
14.3管道的構建124
14.4中間件的其他定義方式127
14.5 Use、Run和Map 128
14.5.1 Use和Run 128
14.5. 2 Map 129
14.5.3 MapWhen 130
14.5.4 UseWhen 130
14.6 IStartupFilter 131
第15章靜態文件訪問與授權133
15.1靜態文件夾133
15.2中間件的實現機制134
15.3新增靜態文件目錄135
15.4靜態文件的授權管理135
第16章路由137
16.1概述137
16.2傳統路由配置138
16.3屬性路由設置139
16.4路由的匹配順序142
16.5路由的約束144
16.5.1 Constraints參數方式144
16.5.2行內簡寫方式145
16.5.3使用正則表達式145
16.5.4自定義約束146
16.6路由的dataTokens 147
16.7路由的初始化源碼解析148
16.7.1 UseRouting方法148
16.7.2 UseEndpoints方法149
16.8路由的請求處理源碼分析152
16.8.1 EndpointRoutingMiddleware 152
16.8.2 Endpoint的生成與匹配示例159
16.8.3 EndpointMiddleware 161
16.9 Endpoint模式的路由方案的優點161
第17章Action的執行163
17.1概述163
17.2 invoker的生成163
17.3 invoker的執行171
第18章Action參數的模型綁定177
18.1概述177
18.2準備階段178
18.2.1創建綁定方法178
18.2.2為每個參數匹配Binder 179
18.3執行階段183
18.4相關知識186
18.4.1 propertyBindingInfo 187
18.4.2 JsonPatch 187
第19章Filter詳解188
19.1概述188
19.2 Filter的簡單例子189
19.3 Filter的用法詳解190
19.3.1單例驗證191
19.3.2通過Attribute方式定義與註冊191
19.3.3支持繼承方式註冊192
19.3.4多功能Filter 193
19.3.5 Filter的同步與異步194
19.3. 6繼承內置FilterAttribute 195
19.4 Filter的獲取197
19.5 Filter的執行200
19.6 Filter的執行順序212
第20章控制返回類型215
20.1常見的返回類型215
20.1.1返回類型215
20.1.2異步方法217
20.2內部處理機制解析218
20.2.1總體流程218
20.2.2 ActionMethodExecutor的選擇與執行219
20.2.3 Result Filter的執行223
20.2.4 IActionResult的執行225
20.2.5 ObjectResult的執行與返回格式的協商227
20.3自定義IActionResult 237
20.4自定義格式化類240
20.5添加XML類型支持242
第21章一個API與小程序的項目244
21.1前期準備244
21.1.1服務器環境搭建245
21.1.2安裝MongoDB數據庫245
21.1.3微信小程序註冊246
21.2 API項目的基本功能248
21.2.1項目創建248
21.2.2操作MongoDB數據庫248
21.2.3 Model定義252
21.2.4 Service接口及實現254
21.2.5 Repository接口及實現255
21.2.6 Controller與Action 257
21.2.7 AutoMapper的使用258
21.3應用JWT進行用戶認證259
21.3.1 JWT的組成260
21.3.2認證流程261
21.3.3用戶登錄與Token的發放262
21.4自定義用戶授權272
21.4.1樣例數據272
21.4.2自定義授權處理274
21.5使用Swagger生成Web API的幫助頁276
21.6微信小程序277
21.6.1歡迎頁278
21.6.2列表頁282
21.6.3圖表頁285
作者介紹
羅志超
具有十餘年的軟件研發經驗,先後在多家公司擔任研發及項目經理。
擅長.NET技術,對前端技術及iOS有一定的了解。
2013年通過項目管理專業人員資質認證(PMP),現階段所研究的項目主要採用.NET Core的相關技術棧。
個人喜歡學習新技術,熱衷於技術分享,希望能為.NET社區的發展盡一份綿薄之力。