對于讀者來說,學(xué)習(xí)ASP.NET Core就像學(xué)習(xí)使用一部新手機。手機內(nèi)部組成結(jié)構(gòu)可能有改變,各個元器件的性能可能有提升,元器件之間的兼容性可能更好。但在操作方式上,用戶除了要學(xué)習(xí)如何使用個別的新功能以及適應(yīng)系統(tǒng)更快的反應(yīng)速度外,并沒有太多改變。
基于以上,本書內(nèi)容主要分為三部分。第一部分是ASP.NET Core的使用說明,簡要介紹如何使用ASP.NET Core創(chuàng)建項目及其與ASP.NET 4.x的不同點;第二部分是真機拆解,講解ASP.NET Core框架的內(nèi)部運行邏輯;第三部分是通過一個項目案例回顧全書知識點,并介紹如何在ASP.NET Core中對用戶進(jìn)行認(rèn)證和授權(quán)。
基于ASP.NET Core 3,從使用的角度展開講解。
如“真機拆解”般分析ASP.NET Core內(nèi)部運行機制。
融合作者多年技術(shù)經(jīng)驗和獨到見解,通俗易懂不枯燥。
輔以豐富的實際案例和代碼,加深理解,活學(xué)活用。
羅志超,具有十余年的軟件研發(fā)經(jīng)驗,先后在多家公司擔(dān)任研發(fā)及項目經(jīng)理。擅長.NET技術(shù),對前端技術(shù)及iOS有一定的了解。2013年通過項目管理專業(yè)人員資質(zhì)認(rèn)證(PMP),現(xiàn)階段所研究的項目主要采用.NET Core的相關(guān)技術(shù)棧。個人喜歡學(xué)習(xí)新技術(shù),熱衷于技術(shù)分享,希望能為.NET社區(qū)的發(fā)展盡一份綿薄之力。
第1章 ASP.NET Core介紹 1
1.1 為什么要使用ASP.NET Core 1
1.2 如何跨平臺 1
第2章 開發(fā)環(huán)境準(zhǔn)備 4
2.1 概述 4
2.2 Windows環(huán)境下Visual Studio的安裝 4
2.3 macOS環(huán)境下Visual Studio的安裝 5
第3章 項目結(jié)構(gòu) 6
3.1 新建項目 6
3.2 項目結(jié)構(gòu)詳解 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的應(yīng)用 17
4.2 _ViewStart的應(yīng)用 20
4.3 頁面的加載順序 20
第5章 TagHelper 22
5.1 概述 22
5.2 自定義TagHelper 24
5.3 TagHelper的注冊 25
5.4 TagHelper的作用范圍 25
5.5 自定義標(biāo)簽 27
5.6 TagHelper與頁面之間的數(shù)據(jù)傳遞 28
5.7 取消標(biāo)簽輸出 29
5.8 TagBuilder 29
第6章 應(yīng)用的跨平臺部署 31
6.1 概述 31
6.2 在CentOS中安裝ASP.NET Core環(huán)境 31
6.3 在Windows上用Visual Studio發(fā)布項目 32
6.4 項目運行測試 32
6.5 創(chuàng)建service管理應(yīng)用 33
6.6 安裝Nginx 34
6.7 SSL免費證書申請 34
6.8 多網(wǎng)站及證書配置 36
6.9 啟用ForwardedHeaders中間件 38
6.10 獨立部署(SCD) 39
第7章 架構(gòu)概覽 40
7.1 ASP.NET Core的運行機制 40
7.2 ASP.NET Core Application的架構(gòu) 41
7.3 對HTTP/2的支持 41
7.3.1 Kestrel 41
7.3.2 IIS(進(jìn)程內(nèi)) 41
7.4 ASP.NET Core的環(huán)境變量 42
第8章 應(yīng)用啟動 43
8.1 概述 43
8.2 HostBuilder的創(chuàng)建與配置 45
8.2.1 Host的創(chuàng)建者HostBuilder 45
8.2.2 GenericWebHostBuilder 50
8.2.3 處理Startup文件 53
8.3 Host的構(gòu)建 57
8.4 Host的啟動 63
第9章 后臺服務(wù) 66
9.1 應(yīng)用場景 66
9.2 實現(xiàn)方式 66
9.2.1 實現(xiàn)IHostedService接口 67
9.2.2 在依賴注入中注冊這個服務(wù) 68
9.3 采用BackgroundService派生類的方式 68
9.4 注意事項 70
第10章 依賴注入 71
10.1 為什么要用依賴注入 71
10.2 容器的構(gòu)建和規(guī)則 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 服務(wù)的Dispose 80
10.6 更換容器 81
第11章 日志 82
11.1 內(nèi)置日志的使用 82
11.2 使用NLog將日志輸出到文件 83
11.3 注意事項 84
11.4 NLog配置簡要說明 85
第12章 應(yīng)用的配置 86
12.1 常見的配置方式 86
12.1.1 文件方式 86
12.1.2 目錄和文件 89
12.1.3 命令行 89
12.1.4 環(huán)境變量 90
12.1.5 內(nèi)存對象 91
12.2 內(nèi)部處理機制解析 92
12.2.1 數(shù)據(jù)源的注冊 92
12.2.2 數(shù)據(jù)源的加載 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 數(shù)據(jù)更新提醒 111
13.1.5 其他配置方式 112
13.2 內(nèi)部處理機制解析 113
13.2.1 系統(tǒng)啟動階段的依賴注入 113
13.2.2 Options值的獲取 116
第14章 請求處理管道 121
14.1 概述 121
14.2 請求在管道中的處理流程 122
14.2.1 簡單的中間件例子 122
14.2.2 請求是如何經(jīng)過各個中間件的 122
14.3 管道的構(gòu)建 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章 靜態(tài)文件訪問與授權(quán) 133
15.1 靜態(tài)文件夾 133
15.2 中間件的實現(xiàn)機制 134
15.3 新增靜態(tài)文件目錄 135
15.4 靜態(tài)文件的授權(quán)管理 135
第16章 路由 137
16.1 概述 137
16.2 傳統(tǒng)路由配置 138
16.3 屬性路由設(shè)置 139
16.4 路由的匹配順序 142
16.5 路由的約束 144
16.5.1 Constraints參數(shù)方式 144
16.5.2 行內(nèi)簡寫方式 145
16.5.3 使用正則表達(dá)式 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模式的路由方案的優(yōu)點 161
第17章 Action的執(zhí)行 163
17.1 概述 163
17.2 invoker的生成 163
17.3 invoker的執(zhí)行 171
第18章 Action參數(shù)的模型綁定 177
18.1 概述 177
18.2 準(zhǔn)備階段 178
18.2.1 創(chuàng)建綁定方法 178
18.2.2 為每個參數(shù)匹配Binder 179
18.3 執(zhí)行階段 183
18.4 相關(guān)知識 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 繼承內(nèi)置FilterAttribute 195
19.4 Filter的獲取 197
19.5 Filter的執(zhí)行 200
19.6 Filter的執(zhí)行順序 212
第20章 控制返回類型 215
20.1 常見的返回類型 215
20.1.1 返回類型 215
20.1.2 異步方法 217
20.2 內(nèi)部處理機制解析 218
20.2.1 總體流程 218
20.2.2 ActionMethodExecutor的選擇與執(zhí)行 219
20.2.3 Result Filter的執(zhí)行 223
20.2.4 IActionResult的執(zhí)行 225
20.2.5 ObjectResult的執(zhí)行與返回格式的協(xié)商 227
20.3 自定義IActionResult 237
20.4 自定義格式化類 240
20.5 添加XML類型支持 242
第21章 一個API與小程序的項目 244
21.1 前期準(zhǔn)備 244
21.1.1 服務(wù)器環(huán)境搭建 245
21.1.2 安裝MongoDB數(shù)據(jù)庫 245
21.1.3 微信小程序注冊 246
21.2 API項目的基本功能 248
21.2.1 項目創(chuàng)建 248
21.2.2 操作MongoDB數(shù)據(jù)庫 248
21.2.3 Model定義 252
21.2.4 Service接口及實現(xiàn) 254
21.2.5 Repository接口及實現(xiàn) 255
21.2.6 Controller與Action 257
21.2.7 AutoMapper的使用 258
21.3 應(yīng)用JWT進(jìn)行用戶認(rèn)證 259
21.3.1 JWT的組成 260
21.3.2 認(rèn)證流程 261
21.3.3 用戶登錄與Token的發(fā)放 262
21.4 自定義用戶授權(quán) 272
21.4.1 樣例數(shù)據(jù) 272
21.4.2 自定義授權(quán)處理 274
21.5 使用Swagger生成Web API的幫助頁 276
21.6 微信小程序 277
21.6.1 歡迎頁 278
21.6.2 列表頁 282
21.6.3 圖表頁 285