第1章 C#與.NET入門 1
1.1 設置開發(fā)環(huán)境 1
1.1.1 使用Visual Studio Code進行
跨平臺開發(fā) 1
1.1.2 使用GitHub Codespaces在云中
進行開發(fā) 2
1.1.3 使用Visual Studio 2019進行
Windows應用程序開發(fā) 3
1.1.4 使用Visual Studio for Mac 進行
移動應用程序開發(fā) 3
1.1.5 各章的推薦工具 3
1.1.6 跨平臺部署 3
1.1.7 理解Visual Studio Code 版本 4
1.1.8 下載并安裝 Visual Studio Code 5
1.1.9 安裝其他擴展 5
1.2 理解.NET 6
1.2.1 理解.NET Framework 6
1.2.2 理解Mono 和Xamarin 項目 6
1.2.3 理解.NET Core 7
1.2.4 了解.NET 5的未來版本 7
1.2.5 了解.NET支持 8
1.2.6 .NET Core與.NET 5的區(qū)別 10
1.2.7 了解.NET Standard 10
1.2.8 本書使用的.NET平臺和工具 11
1.2.9 理解中間語言 12
1.2.10 比較.NET技術 12
1.3 使用Visual Studio Code構建
控制臺應用程序 12
1.3.1 使用Visual Studio Code編寫代碼 12
1.3.2 使用dotnet CLI編譯和運行代碼 14
1.3.3 編寫程序 14
1.4 從GitHub存儲庫下載解決
方案代碼 15
1.4.1 使用Git和Visual Studio Code 15
1.4.2 備份圖書解決方案代碼存儲庫 15
1.5 尋求幫助 16
1.5.1 閱讀微軟文檔 16
1.5.2 獲取關于dotnet工具的幫助 16
1.5.3 獲取類型及其成員的定義 17
1.5.4 在Stack Overflow上尋找答案 18
1.5.5 使用谷歌搜索答案 19
1.5.6 訂閱官方的.NET博客 19
1.6 實踐和探索 19
1.6.1 練習1.1:測試你掌握的知識 19
1.6.2 練習1.2:在任何地方練習C# 20
1.6.3 練習1.3:探索主題 20
1.7 本章小結 20
第2章 C#編程基礎 21
2.1 介紹C# 21
2.1.1 理解語言版本和特性 21
2.1.2 發(fā)現(xiàn)C#編譯器版本 24
2.1.3 啟用特定的語言版本編譯器 25
2.2 了解C#基本知識 26
2.2.1 了解C#語法 27
2.2.2 了解C#詞匯表 28
2.3 使用變量 32
2.3.1 命名和賦值 32
2.3.2 存儲文本 33
2.3.3 存儲數(shù)字 34
2.3.4 存儲布爾值 38
2.3.5 使用Visual Studio Code工作區(qū) 38
2.3.6 存儲任何類型的對象 38
2.3.7 動態(tài)存儲類型 39
2.3.8 聲明局部變量 40
2.3.9 獲取類型的默認值 41
2.3.10 存儲多個值 41
2.4 處理空值 42
2.4.1 使值類型可空 42
2.4.2 啟用可空引用類型和不可空
引用類型 44
2.4.3 聲明不可為空的變量和參數(shù) 44
2.4.4 檢查null 45
2.5 深入研究控制臺應用程序 46
2.5.1 向用戶顯示輸出 46
2.5.2 理解格式字符串 47
2.5.3 從用戶那里獲取文本輸入 48
2.5.4 導入名稱空間 48
2.5.5 簡化控制臺的使用 49
2.5.6 獲取用戶的重要輸入 49
2.5.7 獲取參數(shù) 50
2.5.8 使用參數(shù)設置選項 51
2.5.9 處理不支持API的平臺 52
2.6 實踐和探索 52
2.6.1 練習2.1:測試你掌握的知識 53
2.6.2 練習2.2:練習數(shù)字的大小和范圍 53
2.6.3 練習2.3:探索主題 53
2.7 本章小結 54
第3章 控制程序流程和轉換類型 55
3.1 操作變量 55
3.1.1 一元運算符 55
3.1.2 二元算術運算符 56
3.1.3 賦值運算符 57
3.1.4 邏輯運算符 57
3.1.5 條件邏輯運算符 58
3.1.6 按位和二元移位運算符 59
3.1.7 其他運算符 60
3.2 理解選擇語句 61
3.2.1 使用if語句進行分支 61
3.2.2 if語句為什么應總是使用花括號 62
3.2.3 模式匹配與if語句 62
3.2.4 使用switch語句進行分支 63
3.2.5 模式匹配與switch語句 64
3.2.6 使用switch表達式簡化switch
語句 65
3.3 理解迭代語句 66
3.3.1 while循環(huán)語句 66
3.3.2 do循環(huán)語句 66
3.3.3 for循環(huán)語句 67
3.3.4 foreach循環(huán)語句 67
3.4 類型轉換 68
3.4.1 隱式和顯式地轉換數(shù)值 68
3.4.2 使用System.Convert類型進行
轉換 70
3.4.3 圓整數(shù)字 70
3.4.4 從任何類型轉換為字符串 71
3.4.5 從二進制對象轉換為字符串 72
3.4.6 將字符串轉換為數(shù)值或日期和
時間 73
3.4.7 在轉換類型時處理異常 74
3.4.8 檢查溢出 76
3.5 實踐和探索 78
3.5.1 練習3.1:測試你掌握的知識 79
3.5.2 練習3.2:探索循環(huán)和溢出 79
3.5.3 練習3.3:實踐循環(huán)和運算符 79
3.5.4 練習3.4:實踐異常處理 80
3.5.5 練習3.5:測試你對運算符的認識
程度 80
3.5.6 練習3.6:探索主題 80
3.6 本章小結 81
第4章 編寫、調試和測試函數(shù) 82
4.1 編寫函數(shù) 82
4.1.1 編寫乘法表函數(shù) 82
4.1.2 編寫帶返回值的函數(shù) 84
4.1.3 編寫數(shù)學函數(shù) 86
4.1.4 使用XML注釋解釋函數(shù) 89
4.1.5 在函數(shù)實現(xiàn)中使用lambda 90
4.2 在開發(fā)過程中進行調試 92
4.2.1 創(chuàng)建帶有故意錯誤的代碼 92
4.2.2 設置斷點 93
4.2.3 使用調試工具欄進行導航 94
4.2.4 調試窗格 94
4.2.5 單步執(zhí)行代碼 95
4.2.6 自定義斷點 96
4.3 在開發(fā)和運行時進行日志記錄 97
4.3.1 使用Debug和Trace類型進行
插裝 97
4.3.2 寫入默認的跟蹤偵聽器 98
4.3.3 配置跟蹤偵聽器 98
4.3.4 切換跟蹤級別 99
4.4 單元測試函數(shù) 102
4.4.1 創(chuàng)建需要測試的類庫 102
4.4.2 編寫單元測試 103
4.4.3 運行單元測試 104
4.5 實踐和探索 105
4.5.1 練習4.1:測試你掌握的知識 105
4.5.2 練習4.2:使用調試和單元測試
練習函數(shù)的編寫 105
4.5.3 練習4.3:探索主題 106
4.6 本章小結 106
第5章 使用面向對象編程技術構建
自己的類型 107
5.1 面向對象編程 107
5.2 構建類庫 108
5.2.1 創(chuàng)建類庫 108
5.2.2 實例化類 110
5.2.3 管理多個文件 111
5.2.4 對象 111
5.3 在字段中存儲數(shù)據 112
5.3.1 定義字段 112
5.3.2 理解訪問修飾符 112
5.3.3 設置和輸出字段值 113
5.3.4 使用enum類型存儲值 114
5.3.5 使用enum類型存儲多個值 115
5.3.6 使用集合存儲多個值 116
5.3.7 使字段成為靜態(tài)字段 117
5.3.8 使字段成為常量 118
5.3.9 使字段只讀 118
5.3.10 使用構造函數(shù)初始化字段 119
5.3.11 使用默認字面量設置字段 120
5.4 寫入和調用方法 121
5.4.1 從方法返回值 121
5.4.2 使用元組組合多個返回值 122
5.4.3 定義參數(shù)并將參數(shù)傳遞給方法 124
5.4.4 重載方法 124
5.4.5 傳遞可選參數(shù)和命名參數(shù) 125
5.4.6 控制參數(shù)的傳遞方式 126
5.4.7 使用partial關鍵字分割類 128
5.5 使用屬性和索引器控制訪問 128
5.5.1 定義只讀屬性 128
5.5.2 定義可設置的屬性 129
5.5.3 定義索引器 130
5.6 模式匹配和對象 131
5.6.1 創(chuàng)建和引用.NET 5類庫 131
5.6.2 定義飛機乘客 132
5.6.3 C# 9.0對模式匹配做了增強 133
5.7 使用記錄 134
5.7.1 init-only屬性 134
5.7.2 理解記錄 135
5.7.3 簡化數(shù)據成員 135
5.7.4 位置記錄 136
5.8 實踐和探索 136
5.8.1 練習5.1:測試你掌握的知識 137
5.8.2 練習5.2:探索主題 137
5.9 本章小結 137
第6章 實現(xiàn)接口和繼承類 138
6.1 建立類庫和控制臺應用程序 138
6.2 簡化方法 140
6.2.1 使用方法實現(xiàn)功能 140
6.2.2 使用運算符實現(xiàn)功能 141
6.2.3 使用局部函數(shù)實現(xiàn)功能 142
6.3 觸發(fā)和處理事件 143
6.3.1 使用委托調用方法 143
6.3.2 定義和處理委托 144
6.3.3 定義和處理事件 145
6.4 實現(xiàn)接口 146
6.4.1 公共接口 146
6.4.2 排序時比較對象 146
6.4.3 使用單獨的類比較對象 148
6.4.4 使用默認實現(xiàn)定義接口 149
6.5 使類型可以安全地與泛型
一起重用 151
6.5.1 使用泛型類型 152
6.5.2 使用泛型方法 153
6.6 使用引用類型和值類型管理內存 154
6.6.1 處理struct類型 154
6.6.2 釋放非托管資源 155
6.6.3 確保調用Dispose方法 157
6.7 從類繼承 158
6.7.1 擴展類 158
6.7.2 隱藏成員 158
6.7.3 覆蓋成員 159
6.7.4 防止繼承和覆蓋 160
6.7.5 理解多態(tài) 161
6.8 在繼承層次結構中進行
類型轉換 162
6.8.1 隱式類型轉換 162
6.8.2 顯式類型轉換 162
6.8.3 避免類型轉換異常 163
6.9 繼承和擴展.NET類型 164
6.9.1 繼承異常 164
6.9.2 無法繼承時擴展類型 165
6.10 實踐和探索 167
6.10.1 練習6.1:測試你掌握的知識 167
6.10.2 練習6.2:練習創(chuàng)建繼承層次
結構 167
6.10.3 練習6.3:探索主題 167
6.11 本章小結 168
第7章 理解和打包.NET類型 169
7.1 .NET 5簡介 169
7.1.1 .NET Core 1.0 170
7.1.2 .NET Core 1.1 170
7.1.3 .NET Core 2.0 170
7.1.4 .NET Core 2.1 170
7.1.5 .NET Core 2.2 171
7.1.6 .NET Core 3.0 171
7.1.7 .NET 5 171
7.1.8 從.NET Core 2.0到.NET 5不斷
提高性能 172
7.2 了解.NET組件 172
7.2.1 程序集、包和名稱空間 173
7.2.2 導入名稱空間以使用類型 175
7.2.3 將C#關鍵字與.NET類型相關聯(lián) 175
7.2.4 使用.NET Standard類庫在舊平臺
之間共享代碼 177
7.3 發(fā)布用于部署的應用程序 178
7.3.1 創(chuàng)建要發(fā)布的控制臺應用程序 178
7.3.2 dotnet命令 179
7.3.3 發(fā)布自包含的應用程序 180
7.3.4 發(fā)布單文件應用 181
7.3.5 使用app trimming系統(tǒng)減小應用
程序的大小 182
7.4 反編譯程序集 182
7.5 為NuGet分發(fā)打包自己的庫 185
7.5.1 引用NuGet包 185
7.5.2 為NuGet打包庫 186
7.5.3 測試包 188
7.6 從.NET Framework移植到.NET 5 189
7.6.1 能移植嗎 189
7.6.2 應該移植嗎 190
7.6.3 .NET Framework和.NET 5之間的
區(qū)別 190
7.6.4 .NET可移植性分析器 190
7.6.5 使用非.NET Standard類庫 190
7.7 實踐和探索 192
7.7.1 練習7.1:測試你掌握的知識 192
7.7.2 練習7.2:探索主題 192
7.8 本章小結 193
第8章 使用常見的.NET類型 194
8.1 處理數(shù)字 194
8.1.1 處理大的整數(shù) 195
8.1.2 處理復數(shù) 195
8.2 處理文本 196
8.2.1 獲取字符串的長度 196
8.2.2 獲取字符串中的字符 196
8.2.3 拆分字符串 196
8.2.4 獲取字符串的一部分 197
8.2.5 檢查字符串的內容 197
8.2.6 連接、格式化和其他的字符串
成員方法 198
8.2.7 高效地構建字符串 199
8.3 模式匹配與正則表達式 199
8.3.1 檢查作為文本輸入的數(shù)字 199
8.3.2 正則表達式的語法 200
8.3.3 正則表達式的例子 201
8.3.4 分割使用逗號分隔的復雜字符串 201
8.3.5 改進正則表達式的性能 202
8.4 在集合中存儲多個對象 203
8.4.1 所有集合的公共特性 203
8.4.2 理解集合的選擇 204
8.4.3 使用列表 206
8.4.4 使用字典 207
8.4.5 集合的排序 207
8.4.6 使用專門的集合 208
8.4.7 使用不可變集合 208
8.5 使用Span、索引和范圍 209
8.5.1 高效地使用內存 209
8.5.2 用索引類型標識位置 209
8.5.3 使用Range值類型標識范圍 209
8.5.4 使用索引和范圍 210
8.6 使用網絡資源 211
8.6.1 使用URI、DNS和IP地址 211
8.6.2 ping服務器 212
8.7 處理類型和屬性 213
8.7.1 程序集的版本控制 213
8.7.2 閱讀程序集元數(shù)據 214
8.7.3 創(chuàng)建自定義特性 215
8.7.4 更多地使用反射 217
8.8 處理圖像 218
8.9 國際化代碼 219
8.10 實踐和探索 221
8.10.1 練習8.1:測試你掌握的知識 221
8.10.2 練習8.2:練習正則表達式 222
8.10.3 練習8.3:練習編寫擴展方法 222
8.10.4 練習8.4:探索主題 222
8.11 本章小結 223
第9章 處理文件、流和序列化 224
9.1 管理文件系統(tǒng) 224
9.1.1 處理跨平臺環(huán)境和文件系統(tǒng) 224
9.1.2 管理驅動器 225
9.1.3 管理目錄 226
9.1.4 管理文件 228
9.1.5 管理路徑 229
9.1.6 獲取文件信息 230
9.1.7 控制如何處理文件 231
9.2 用流來讀寫 231
9.2.1 寫入文本流 233
9.2.2 寫入XML流 234
9.2.3 文件資源的釋放 235
9.2.4 壓縮流 237
9.2.5 使用Brotli算法進行壓縮 238
9.2.6 使用管道的高性能流 240
9.2.7 異步流 240
9.3 編碼和解碼文本 240
9.3.1 將字符串編碼為字節(jié)數(shù)組 241
9.3.2 對文件中的文本進行編碼和解碼 243
9.4 序列化對象圖 243
9.4.1 序列化為XML 243
9.4.2 生成緊湊的XML 245
9.4.3 反序列化XML文件 246
9.4.4 用JSON序列化格式 246
9.4.5 高性能的JSON處理 248
9.5 實踐和探索 249
9.5.1 練習9.1:測試你掌握的知識 249
9.5.2 練習9.2:練習序列化為XML 249
9.5.3 練習9.3:探索主題 250
9.6 本章小結 250
第10章 保護數(shù)據和應用程序 251
10.1 理解數(shù)據保護術語 251
10.1.1 密鑰和密鑰的大小 252
10.1.2 IV和塊大小 252
10.1.3 salt 252
10.1.4 生成密鑰和IV 253
10.2 加密和解密數(shù)據 253
10.3 哈希數(shù)據 257
10.4 簽名數(shù)據 260
10.5 生成隨機數(shù) 263
10.5.1 為游戲生成隨機數(shù) 263
10.5.2 為密碼生成隨機數(shù) 264
10.6 密碼學有什么新內容 264
10.7 用戶的身份驗證和授權 265
10.7.1 實現(xiàn)身份驗證和授權 267
10.7.2 保護應用程序功能 269
10.8 實踐和探索 270
10.8.1 練習10.1:測試你掌握的知識 270
10.8.2 練習10.2:練習使用加密和
哈希方法保護數(shù)據 270
10.8.3 練習10.3:練習使用解密
保護數(shù)據 270
10.8.4 練習10.4:探索主題 270
10.9 本章小結 271
第11章 使用Entity Framework Core
處理數(shù)據庫 272
11.1 理解現(xiàn)代數(shù)據庫 272
11.1.1 理解舊的實體框架 272
11.1.2 理解Entity Framework Core 273
11.1.3 使用示例關系數(shù)據庫 273
11.1.4 為SQLite創(chuàng)建Northwind示例
數(shù)據庫 275
11.1.5 使用SQLiteStudio管理Northwind
示例數(shù)據庫 275
11.2 設置EF Core 276
11.2.1 選擇EF Core數(shù)據提供程序 276
11.2.2 安裝dotnet-ef工具 277
11.2.3 連接到數(shù)據庫 277
11.3 定義EF Core模型 278
11.3.1 EF Core約定 278
11.3.2 EF Core注解特性 278
11.3.3 EF Core Fluent API 279
11.3.4 理解數(shù)據播種 280
11.3.5 構建EF Core模型 280
11.4 查詢EF Core模型 287
11.4.1 過濾和排序產品 289
11.4.2 記錄EF Core 291
11.4.3 使用查詢標記進行日志記錄 294
11.4.4 模式匹配與Like 294
11.4.5 定義全局過濾器 295
11.5 使用EF Core加載模式 296
11.5.1 立即加載實體 296
11.5.2 啟用延遲加載 296
11.5.3 顯式加載實體 297
11.6 使用EF Core操作數(shù)據 299
11.6.1 插入實體 299
11.6.2 更新實體 300
11.6.3 刪除實體 301
11.6.4 池化數(shù)據庫環(huán)境 302
11.6.5 事務 302
11.6.6 定義顯式事務 303
11.7 實踐和探索 303
11.7.1 練習11.1:測試你掌握的知識 303
11.7.2 練習11.2:練習使用不同的
序列化格式導出數(shù)據 304
11.7.3 練習11.3:研究EF Core文檔 304
11.8 本章小結 304
第12章 使用LINQ查詢和操作數(shù)據 305
12.1 編寫LINQ查詢 305
12.1.1 使用Enumerable類擴展序列 305
12.1.2 使用Where擴展方法過濾實體 306
12.1.3 實體的排序 309
12.1.4 根據類型進行過濾 310
12.2 使用LINQ處理集合 312
12.3 使用LINQ與EF Core 313
12.3.1 序列的篩選和排序 315
12.3.2 將序列投影到新的類型中 316
12.3.3 連接和分組序列 317
12.3.4 聚合序列 320
12.4 使用語法糖美化LINQ語法 320
12.5 使用帶有并行LINQ的多個
線程 322
12.6 創(chuàng)建自己的LINQ擴展方法 324
12.7 使用LINQ to XML 327
12.7.1 使用LINQ to XML生成XML 327
12.7.2 使用LINQ to XML讀取XML 327
12.8 實踐和探索 328
12.8.1 練習12.1:測試你掌握的知識 328
12.8.2 練習12.2:練習使用LINQ
進行查詢 329
12.8.3 練習12.3:探索主題 329
12.9 本章小結 329
第13章 使用多任務提高性能和
可伸縮性 330
13.1 理解進程、線程和任務 330
13.2 監(jiān)控性能和資源使用情況 331
13.2.1 評估類型的效率 331
13.2.2 監(jiān)控性能和內存使用情況 332
13.2.3 實現(xiàn)Recorder類 332
13.3 異步運行任務 335
13.3.1 同步執(zhí)行多個操作 336
13.3.2 使用任務異步執(zhí)行多個操作 337
13.3.3 等待任務 338
13.3.4 繼續(xù)執(zhí)行另一項任務 339
13.3.5 嵌套任務和子任務 340
13.4 同步訪問共享資源 341
13.4.1 從多個線程訪問資源 341
13.4.2 對資源應用互斥鎖 342
13.4.3 理解lock語句并避免死鎖 343
13.4.4 事件的同步 344
13.4.5 使CPU操作原子化 345
13.4.6 應用其他類型的同步 345
13.5 理解async和await 346
13.5.1 提高控制臺應用程序的響應
能力 346
13.5.2 改進GUI應用程序的響應能力 347
13.5.3 改進Web應用程序和Web服務
的可伸縮性 347
13.5.4 支持多任務處理的常見類型 347
13.5.5 在catch塊中使用await
關鍵字 348
13.5.6 使用async流 348
13.6 實踐和探索 349
13.6.1 練習13.1:測試你掌握的知識 349
13.6.2 練習13.2:探索主題 349
13.7 本章小結 349
第14章 C#和.NET的實際應用 350
14.1 理解C#和.NET的應用模型 350
14.1.1 使用ASP.NET Core構建網站 350
14.1.2 使用Web內容管理系統(tǒng)
構建網站 351
14.1.3 理解Web應用程序 351
14.1.4 構建和使用Web服務 352
14.1.5 構建智能應用 352
14.2 ASP.NET Core的新特性 352
14.2.1 ASP.NET Core 1.0 352
14.2.2 ASP.NET Core 1.1 352
14.2.3 ASP.NET Core 2.0 353
14.2.4 ASP.NET Core 2.1 353
14.2.5 ASP.NET Core 2.2 353
14.2.6 ASP.NET Core 3.0 354
14.2.7 ASP.NET Core 3.1 354
14.2.8 Blazor WebAssembly 3.2 354
14.2.9 ASP.NET Core 5.0 354
14.3 理解SignalR 355
14.4 理解Blazor 356
14.4.1 JavaScript存在的問題 356
14.4.2 Silverlight 356
14.4.3 WebAssembly 356
14.4.4 服務器端或客戶端Blazor 357
14.5 構建Windows桌面應用程序和
跨平臺的移動應用程序 357
14.5.1 構建跨平臺的移動應用程序 357
14.5.2 使用舊技術構建Windows桌面
應用程序 358
14.6 為Northwind示例數(shù)據庫構建
實體數(shù)據模型 358
14.6.1 為Northwind實體模型創(chuàng)建
類庫 358
14.6.2 為Northwind數(shù)據庫上下文創(chuàng)建
類庫 361
14.7 本章小結 363
第15章 使用ASP.NET Core Razor Pages
構建網站 365
15.1 了解Web開發(fā) 365
15.1.1 HTTP 365
15.1.2 客戶端Web開發(fā) 367
15.2 了解ASP.NET Core 368
15.2.1 傳統(tǒng)的ASP.NET與現(xiàn)代的
ASP.NET Core 369
15.2.2 創(chuàng)建ASP.NET Core項目 369
15.2.3 測試和保護網站 371
15.2.4 控制托管環(huán)境 373
15.2.5 啟用靜態(tài)文件和默認文件 374
15.3 了解Razor Pages 376
15.3.1 啟用Razor Pages 376
15.3.2 定義Razor頁面 376
15.3.3 通過Razor頁面使用共享布局 377
15.3.4 使用后臺代碼文件與Razor
頁面 379
15.4 使用Entity Framework Core與
ASP.NET Core 381
15.4.1 將Entity Framework Core配置為
服務 381
15.4.2 使用Razor頁面操作數(shù)據 383
15.5 使用Razor類庫 384
15.5.1 創(chuàng)建Razor類庫 384
15.5.2 禁用壓縮文件夾功能 385
15.5.3 在Razor類庫中顯示員工 386
15.5.4 實現(xiàn)分部視圖以顯示單個員工 387
15.5.5 使用和測試Razor類庫 388
15.5.6 配置服務和HTTP請求管道 389
15.5.7 注冊服務 390
15.5.8 配置HTTP請求管道 391
15.5.9 創(chuàng)建一個簡單的ASP.NET Core
網站項目 394
15.6 實踐和探索 395
15.6.1 練習15.1:測試你掌握的知識 395
15.6.2 練習15.2:練習建立數(shù)據驅動的
網頁 395
15.6.3 練習15.3:練習為控制臺應用
程序構建Web頁面 395
15.6.4 練習15.4:探索主題 395
15.7 本章小結 396
第16章 使用MVC模式構建網站 397
16.1 設置ASP.NET Core MVC網站 397
16.1.1 創(chuàng)建和探索ASP.NET Core MVC
網站 397
16.1.2 審查ASP.NET Core MVC網站 399
16.1.3 回顧ASP.NET Core Identity
數(shù)據庫 401
16.2 探索ASP.NET Core MVC網站 401
16.2.1 了解ASP.NET Core MVC的
啟動 401
16.2.2 理解MVC使用的默認路由 403
16.2.3 理解控制器和操作 403
16.2.4 理解視圖搜索路徑約定 405
16.2.5 單元測試MVC 405
16.2.6 過濾器 405
16.2.7 實體和視圖模型 407
16.2.8 視圖 408
16.3 自定義ASP.NET Core MVC
網站 410
16.3.1 自定義樣式 411
16.3.2 設置類別圖像 411
16.3.3 Razor語法 411
16.3.4 定義類型化視圖 412
16.3.5 測試自定義首頁 414
16.3.6 使用路由值傳遞參數(shù) 415
16.3.7 模型綁定程序 417
16.3.8 驗證模型 419
16.3.9 視圖輔助方法 422
16.3.10 查詢數(shù)據庫和使用顯示模板 422
16.3.11 使用異步任務提高可伸縮性 424
16.4 使用其他項目模板 425
16.5 實踐與探索 427
16.5.1 練習16.1:測試你掌握的知識 427
16.5.2 練習16.2:通過實現(xiàn)類別詳細
信息頁面來練習實現(xiàn)MVC 427
16.5.3 練習16.3:理解和實現(xiàn)異步操作
方法以提高可伸縮性 427
16.5.4 練習16.4:探索主題 427
16.6 本章小結 428
第17章 使用內容管理系統(tǒng)構建網站 429
17.1 了解CMS的優(yōu)點 429
17.1.1 了解CMS的基本特性 429
17.1.2 了解企業(yè)級CMS的特性 430
17.1.3 了解CMS平臺 430
17.2 了解Piranha CMS 430
17.2.1 開源庫和許可 431
17.2.2 創(chuàng)建Piranha CMS網站 431
17.2.3 探索Piranha CMS網站 432
17.2.4 編輯站點和頁面內容 433
17.2.5 創(chuàng)建一個新的頁面 436
17.2.6 創(chuàng)建一個新的子頁面 437
17.2.7 回顧博客歸檔 438
17.2.8 文章和頁面評論 439
17.2.9 探索身份驗證和授權 440
17.2.10 探索配置 441
17.2.11 測試新內容 442
17.2.12 了解路由 442
17.2.13 了解媒體 444
17.2.14 理解應用程序服務 444
17.2.15 理解內容類型 445
17.2.16 理解標準塊 449
17.2.17 檢查組件類型和標準塊 450
17.3 定義組件、內容類型和模板 451
17.3.1 創(chuàng)建自定義區(qū)域 452
17.3.2 創(chuàng)建實體數(shù)據模型 453
17.3.3 創(chuàng)建自定義頁面類型 454
17.3.4 創(chuàng)建自定義視圖模型 454
17.3.5 為內容類型自定義內容模板 455
17.3.6 通過配置啟動和導入數(shù)據庫 458
17.3.7 學習如何使用項目模板
創(chuàng)建內容 460
17.4 測試Northwind CMS網站 461
17.4.1 上傳圖像并創(chuàng)建類別根目錄 461
17.4.2 導入類別和產品內容 462
17.4.3 管理類別內容 463
17.4.4 Piranha如何存儲內容 464
17.5 實踐和探索 465
17.5.1 練習17.1:測試你掌握的知識 465
17.5.2 練習17.2:練習定義塊類型,
用以呈現(xiàn)YouTube視頻 465
17.5.3 練習17.3:探索主題 466
17.6 本章小結 466
第18章 構建和消費Web服務 467
18.1 使用ASP.NET Core Web API
構建Web服務 467
18.1.1 理解Web服務縮寫詞 467
18.1.2 創(chuàng)建ASP.NET Core Web API
項目 468
18.1.3 檢查Web服務的功能 470
18.1.4 為Northwind示例數(shù)據庫創(chuàng)建
Web服務 471
18.1.5 為實體創(chuàng)建數(shù)據存儲庫 473
18.1.6 實現(xiàn)Web API控制器 476
18.1.7 配置客戶存儲庫和Web API
控制器 477
18.1.8 指定問題的細節(jié) 480
18.1.9 控制XML序列化 481
18.2 解釋和測試Web服務 481
18.2.1 使用瀏覽器測試GET請求 481
18.2.2 使用REST Client擴展測試
HTTP請求 482
18.2.3 啟用Swagger 485
18.2.4 使用Swagger UI測試請求 486
18.3 使用HTTP客戶端消費服務 490
18.3.1 了解HttpClient類 490
18.3.2 使用HttpClientFactory配置
HTTP客戶端 490
18.3.3 在控制器中以JSON的形式
獲取客戶 491
18.3.4 支持跨源資源共享 493
18.4 實現(xiàn)高級功能 494
18.4.1 實現(xiàn)健康檢查API 495
18.4.2 實現(xiàn)Open API分析器和約定 495
18.4.3 實現(xiàn)臨時故障處理 496
18.4.4 理解端點路由 496
18.4.5 配置端點路由 496
18.4.6 添加HTTP安全標頭 498
18.4.7 保護Web服務 499
18.5 了解其他通信技術 499
18.5.1 了解WCF 499
18.5.2 了解gRPC 500
18.6 實踐和探索 500
18.6.1 練習18.1:測試你掌握的知識 500
18.6.2 練習18.2:練習使用HttpClient
創(chuàng)建和刪除客戶 500
18.6.3 練習18.3:探索主題 500
18.7 本章小結 501
第19章 使用機器學習構建智能
應用程序 502
19.1 了解機器學習 502
19.1.1 了解機器學習的生命周期 502
19.1.2 了解用于訓練和測試的數(shù)據集 503
19.1.3 了解機器學習任務 503
19.1.4 了解Microsoft Azure Machine
Learning 504
19.2 理解ML.NET 504
19.2.1 了解Infer.NET 505
19.2.2 了解ML.NET學習管道 505
19.2.3 了解模型訓練的概念 506
19.2.4 了解缺失值和鍵類型 506
19.2.5 了解特性和標簽 506
19.3 進行產品推薦 507
19.3.1 問題分析 507
19.3.2 數(shù)據的收集和處理 507
19.3.3 創(chuàng)建NorthwindML網站項目 508
19.3.4 測試產品推薦網站 519
19.4 實踐和探索 521
19.4.1 練習19.1:測試你掌握的知識 521
19.4.2 練習19.2:使用樣本進行練習 521
19.4.3 練習19.3:探索主題 521
19.5 本章小結 522
第20章 使用Blazor構建Web用戶
界面 523
20.1 理解Blazor 523
20.1.1 理解Blazor托管模型 523
20.1.2 理解Blazor組件 524
20.1.3 比較Blazor和Razor 524
20.1.4 比較Blazor項目模板 524
20.2 使用Blazor服務器構建組件 532
20.2.1 定義和測試簡單的組件 532
20.2.2 將實體放入組件 533
20.2.3 為Blazor組件抽象服務 535
20.2.4 使用Blazor表單 537
20.3 使用Blazor WebAssembly
構建組件 542
20.3.1 為Blazor WebAssembly配置
服務器 543
20.3.2 為Blazor WebAssembly配置
客戶端 545
20.3.3 Web應用程序的漸進式支持 548
20.4 實踐和探索 550
20.4.1 練習20.1:測試你掌握的知識 550
20.4.2 練習20.2:練習創(chuàng)建組件 550
20.4.3 練習20.3:探索主題 550
20.5 本章小結 551
第21章 構建跨平臺的移動應用程序 552
21.1 了解XAML 552
21.1.1 使用XAML簡化代碼 553
21.1.2 選擇常見的控件 553
21.1.3 理解標記擴展 554
21.2 了解Xamarin和Xamarin. Forms 554
21.2.1 Xamarin.Forms擴展了Xamarin 554
21.2.2 移動先行,云先行 554
21.2.3 不同移動平臺的市場份額 555
21.2.4 了解一些額外功能 555
21.2.5 了解Xamarin.Forms用戶界面
組件 556
21.3 使用Xamarin.Forms構建移動
應用程序 557
21.3.1 添加Android SDK 558
21.3.2 創(chuàng)建Xamarin.Forms解決方案 558
21.3.3 創(chuàng)建具有雙向數(shù)據綁定的
實體模型 559
21.3.4 為撥打電話號碼創(chuàng)建組件 562
21.3.5 為客戶列表和客戶詳細信息創(chuàng)建
視圖 565
21.3.6 測試移動應用程序 569
21.4 在移動應用程序中消費Web
服務 571
21.4.1 配置Web服務以允許不安全
的請求 572
21.4.2 配置iOS應用程序以允許不安全
的連接 572
21.4.3 配置Android應用程序,允許
進行不安全連接 573
21.4.4 添加用于消費Web服務的
NuGet包 573
21.4.5 從Web服務中獲取客戶 574
21.5 實踐和探索 575
21.5.1 練習21.1:測試你掌握的知識 575
21.5.2 練習21.2:探索主題 576
21.6 本章小結 576
附錄部分(請掃描封底二維碼獲取)
附錄A 練習題答案
附錄B 構建Windows桌面應用程序