C# 11 和.NET 7 入門與跨平臺開發, 7/e

[美] 馬克·J. 普萊斯(Mark J. Price) 著 葉偉民 譯

  • C# 11 和.NET 7 入門與跨平臺開發, 7/e-preview-1
  • C# 11 和.NET 7 入門與跨平臺開發, 7/e-preview-2
  • C# 11 和.NET 7 入門與跨平臺開發, 7/e-preview-3
C# 11 和.NET 7 入門與跨平臺開發, 7/e-preview-1

買這商品的人也買了...

商品描述

《C# 11和.NET 7入門與跨平臺開發(第7版)》將為你學習C# 11和.NET 7奠定堅實的基礎,使你能夠自信地構建應用程序和服務。學習完本書,你將能夠創建豐富的Web應用,並能牢牢掌握面向對象編程技術,進而能在此基礎上進行項目開發。 ● 使用Blazor、Razor Pages、MVC模式和 ASP.NET Core的其他特性構建豐富的Web應用 ● 利用面向對象編程構建自己的類型 ● 編寫、測試和調試函數 ● 使用LINQ查詢和操作數據 ● 使用Entity Framework Core模型在應用程序中集成和更新數據庫 ● 使用**的技術,包括Web API和最小API,構建和消費強大的服務

目錄大綱

第1 章 C#與.NET 入門       1

1.1 設置開發環境        2

1.1.1 選擇適合學習的工具和應用程序類型        3

1.1.2 跨平臺部署       5

1.1.3 下載並安裝Visual Studio 2022 for Windows         5

1.1.4 下載並安裝Visual Studio Code   6

1.2 理解.NET         8

1.2.1 理解.NET Framework     8

1.2.2 理解Mono、Xamarin 和Unity項目          9

1.2.3 理解.NET Core      9

1.2.4 瞭解走向.NET 的過程     9

1.2.5 瞭解.NET 支持     10

1.2.6 現代.NET 的區別    12

1.2.7 瞭解.NET Standard      13

1.2.8 本書使用的.NET 平臺和工具  14

1.2.9 Apps and Services with NET 7 中涵蓋的主題       15

1.2.10 理解中間語言     15

1.2.11 比較.NET 技術      15

1.3 使用Visual Studio 2022 構建控制台應用程序      16

1.3.1 使用Visual Studio 2022 管理多個項目      16

1.3.2 使用Visual Studio 2022編寫代碼      16

1.3.3 使用Visual Studio 編譯和運行代碼      17

1.3.4 理解頂級程序     19

1.3.5 使用Visual Studio 2022 添加第二個項目       21

1.4 使用Visual Studio Code 構建控制台應用程序      22

1.4.1 使用Visual Studio Code 管理多個項目      22

1.4.2 使用Visual Studio Code編寫代碼      22

1.4.3 使用dotnet CLI 編譯和運行代碼      25

1.4.4 使用Visual Studio Code 添加第二個項目      26

1.5 使用.NET Interactive Notebook探索代碼        27

1.6 檢查項目的文件夾和文件   28

1.6.1 瞭解常見的文件夾和文件   28

1.6.2 理解GitHub 中的解決方案代碼 28

1.7 充分利用本書的GitHub 存儲庫  29

1.7.1 對本書提出問題      29

1.7.2 反饋        29

1.7.3 從GitHub 存儲庫下載解決方案代碼      30

1.7.4 在Visual Studio Code 和命令行中使用Git        30

1.8 尋求幫助        31

1.8.1 閱讀微軟文檔     31

1.8.2 獲取關於dotnet 工具的幫助  31

1.8.3 獲取類型及其成員的定義   32

1.8.4 在Stack Overflow 上尋找答案  34

1.8.5 使用谷歌搜索答案     34

1.8.6 訂閱官方的.NET 博客   35

1.8.7 觀看Scott Hanselman 的視頻   35

1.8.8 本書的配套圖書      35

1.9 實踐和探索       35

1.9.1 練習1.1:測試你掌握的知識  36

1.9.2 練習1.2:使用瀏覽器在任何地方練習C#      36

1.9.3 練習1.3:探索主題    36

1.9.4 練習1.4:探索現代.NET 的主題  37

1.10 本章小結       37

第2 章 C#編程基礎      38

2.1 介紹C#        38

2.1.1 理解語言版本和特性    38

2.1.2 瞭解C#標準      42

2.1.3 瞭解C#編譯器版本    43

2.2 理解C#語法和詞匯     45

2.2.1 顯示編譯器版本     45

2.2.2 瞭解C#語法      46

2.2.3 語句        46

2.2.4 註釋        47

2.2.5 塊        47

2.2.6 語句和塊的示例     48

2.2.7 瞭解C#詞匯表     48

2.2.8 將編程語言與人類語言進行比較        48

2.2.9 改變C#語法的配色方案    49

2.2.10 如何編寫正確的代碼   49

2.2.11 導入名稱空間     50

2.2.12 動詞表示方法     53

2.2.13 名詞表示類型、變量、字段和屬性        54

2.2.14 揭示C#詞匯表的範圍   54

2.3 使用變量        56

2.3.1 命名和賦值       57

2.3.2 字面值       57

2.3.3 存儲文本      57

2.3.4 存儲數字      60

2.3.5 存儲實數      61

2.3.6 存儲布爾值       64

2.3.7 存儲任何類型的對象    64

2.3.8 動態存儲類型     65

2.3.9 聲明局部變量     66

2.3.10 獲取和設置類型的默認值   68

2.4 深入研究控制台應用程序   69

2.4.1 向用戶顯示輸出      69

2.4.2 從用戶那裡獲取文本輸入   72

2.4.3 簡化控制台的使用     73

2.4.4 獲取用戶的重要輸入    74

2.4.5 向控制台應用程序傳遞參數  74

2.4.6 使用參數設置選項     76

2.4.7 處理不支持API 的平臺   78

2.5 理解async 和await      79

2.6 實踐和探索       80

2.6.1 練習2.1:測試你掌握的知識  81

2.6.2 練習2.2:測試你對數字類型的瞭解      81

2.6.3 練習2.3:練習數字大小和範圍        81

2.6.4 練習2.4:探索主題    82

2.7 本章小結        82

第3 章 控製程序流程、轉換類型和處理異常       83

3.1 操作變量        83

3.1.1 一元算術運算符      84

3.1.2 二元算術運算符      85

3.1.3 賦值運算符      86

3.1.4 邏輯運算符      86

3.1.5 條件邏輯運算符      87

3.1.6 按位和二元移位運算符   88

3.1.7 其他運算符      90

3.2 理解選擇語句      90

3.2.1 使用if 語句進行分支    90

3.2.2 模式匹配與if 語句     91

3.2.3 使用switch 語句進行分支  92

3.2.4 模式匹配與switch 語句   94

3.2.5 使用switch 表達式簡化

switch 語句      95

3.3 理解迭代語句      96

3.3.1 while 循環語句     96

3.3.2 do 循環語句      97

3.3.3 for 循環語句      97

3.3.4 foreach 循環語句     98

3.3.5 在數組中存儲多個值    99

3.4 類型轉換       105

3.4.1 隱式和顯式地轉換數字   105

3.4.2 使用System.Convert 類型進行轉換      107

3.4.3 圓整數字      107

3.4.4 控制圓整規則     108

3.4.5 從任何類型轉換為字符串   108

3.4.6 從二進制對象轉換為字符串  109

3.4.7 將字符串轉換為數字或日期和時間     110

3.5 處理異常        111

3.6 檢查溢出       115

3.6.1 使用checked 語句拋出溢出異常        115

3.6.2 使用unchecked 語句禁用編譯時溢出檢查      116

3.7 實踐和探索       117

3.7.1 練習3.1:測試你掌握的知識 118

3.7.2 練習3.2:探索循環和溢出   118

3.7.3 練習3.3:實踐循環和運算符 118

3.7.4 練習3.4:實踐異常處理  119

3.7.5 練習3.5:測試你對運算符的認識程度      119

3.7.6 練習3.6:探索主題    119

3.8 本章小結       120

第4 章 編寫、調試和測試函數   121

4.1 編寫函數       121

4.1.1 理解頂級程序和函數    121

4.1.2 乘法表示例     123

4.1.3 簡述實參與形參    125

4.1.4 編寫帶返回值的函數    126

4.1.5 將數字從序數轉換為基數   128

4.1.6 用遞歸計算階乘    129

4.1.7 使用XML 註釋解釋函數   132

4.1.8 在函數實現中使用lambda  133

4.2 在開發過程中進行調試    135

4.2.1 在調試期間使用Visual Studio Code集成終端      135

4.2.2 創建帶有故意錯誤的代碼   136

4.2.3 設置斷點並開始調試   137

4.2.4 使用調試工具欄進行導航   139

4.2.5 調試窗口      140

4.2.6 單步執行代碼     140

4.2.7 自定義斷點      141

4.3 在開發期間進行熱重載    142

4.3.1 使用Visual Studio 2022 進行熱重載       143

4.3.2 使用Visual Studio Code 和命令行進行熱重載      143

4.4 在開發和運行時進行日誌記錄  144

4.4.1 理解日誌記錄選項     144

4.4.2 使用Debug 和Trace 類型   144

4.4.3 配置跟蹤偵聽器    146

4.4.4 切換跟蹤級別     147

4.4.5 記錄有關源代碼的信息   152

4.5 單元測試       153

4.5.1 理解測試類型     153

4.5.2 創建需要測試的類庫   154

4.5.3 編寫單元測試     156

4.6 在函數中拋出和捕獲異常   158

4.6.1 理解使用錯誤和執行錯誤   158

4.6.2 在函數中通常拋出異常   158

4.6.3 理解調用堆棧     159

4.6.4 在哪裡捕獲異常    162

4.6.5 重新拋出異常     162

4.6.6 實現tester-doer 模式   163

4.7 實踐和探索       164

4.7.1 練習4.1:測試你掌握的知識 164

4.7.2 練習4.2:使用調試和單元測試練習函數的編寫    165

4.7.3 練習4.3:探索主題    165

4.8 本章小結       165

第5 章 使用面向對象編程技術構建自己的類型      166

5.1 面向對象編程      166

5.2 構建類庫       167

5.2.1 創建類庫      167

5.2.2 在名稱空間中定義類   168

5.2.3 理解成員      169

5.2.4 實例化類      169

5.2.5 導入名稱空間以使用類型   170

5.2.6 理解對象      172

5.3 在字段中存儲數據     173

5.3.1 定義字段      173

5.3.2 理解訪問修飾符    174

5.3.3 設置和輸出字段值     174

5.3.4 使用enum 類型存儲值    175

5.3.5 使用enum 類型存儲多個值  176

5.4 使用集合存儲多個值     177

5.4.1 理解泛型集合     178

5.4.2 使字段成為靜態字段    178

5.4.3 使字段成為常量    179

5.4.4 使字段只讀     180

5.4.5 使用構造函數初始化字段   181

5.5 編寫和調用方法      182

5.5.1 從方法返回值     182

5.5.2 使用元組組合多個返回值   182

5.5.3 定義參數並將參數傳遞給方法  185

5.5.4 重載方法      186

5.5.5 傳遞可選參數和命名參數   186

5.5.6 控制參數的傳遞方式    188

5.5.7 理解ref 返回      189

5.5.8 使用partial 關鍵字拆分類   189

5.6 使用屬性和索引器控制訪問   190

5.6.1 定義只讀屬性     190

5.6.2 定義可設置的屬性     191

5.6.3 要求在實例化期間設置屬性  193

5.6.4 定義索引器     195

5.7 有關方法的詳細介紹     196

5.7.1 使用方法實現功能     196

5.7.2 使用運算符實現功能    199

5.7.3 使用局部函數實現功能   201

5.8 模式匹配和對象      202

5.8.1 定義飛機乘客     202

5.8.2 C# 9 及後續版本對模式匹配做了增強      203

5.9 使用記錄       204

5.9.1 init-only 屬性      204

5.9.2 理解記錄      205

5.9.3 記錄中的位置數據成員   206

5.10 實踐和探索      206

5.10.1 練習5.1:測試你掌握的知識       207

5.10.2 練習5.2:探索主題   207

5.11 本章小結       207

第6 章 實現接口和繼承類    208

6.1 建立類庫和控制台應用程序   208

6.2 使用泛型安全地重用類型   210

6.2.1 使用非泛型類型    210

6.2.2 使用泛型類型     211

6.3 觸發和處理事件      212

6.3.1 使用委托調用方法     212

6.3.2 定義和處理委托    213

6.3.3 定義和處理事件    215

6.4 實現接口       216

6.4.1 公共接口      216

6.4.2 排序時比較對象    216

6.4.3 使用單獨的類比較對象   220

6.4.4 隱式和顯式的接口實現   221

6.4.5 使用默認實現定義接口   222

6.5 使用引用類型和值類型

管理內存       223

6.5.1 定義引用類型和值類型   223

6.5.2 如何在內存中存儲引用類型和值類型     224

6.5.3 類型的相等性     225

6.5.4 定義struct 類型     226

6.5.5 使用record struct 類型   228

6.5.6 釋放非托管資源    228

6.5.7 確保調用Dispose 方法   229

6.6 使用空值       230

6.6.1 使值類型可為空    230

6.6.2 瞭解與null 相關的縮略詞   232

6.6.3 理解可空引用類型     232

6.6.4 控制可空性警告檢查特性   232

6.6.5 聲明非可空變量和參數   233

6.6.6 檢查null       235

6.7 從類繼承       237

6.7.1 擴展類以添加功能     237

6.7.2 隱藏成員      237

6.7.3 覆蓋成員      238

6.7.4 從抽象類繼承     239

6.7.5 防止繼承和覆蓋    240

6.7.6 理解多態      241

6.8 在繼承層次結構中進行類型轉換         242

6.8.1 隱式類型轉換     242

6.8.2 顯式類型轉換     242

6.8.3 避免類型轉換異常     243

6.9 繼承和擴展.NET 類型    244

6.9.1 繼承異常      244

6.9.2 無法繼承時擴展類型    246

6.10 編寫更好的代碼     248

6.10.1 將警告視為錯誤    248

6.10.2 瞭解警告波      250

6.10.3 使用分析器編寫更好的代碼 251

6.10.4 抑制警告       254

6.10.5 修改代碼       254

6.11 實踐和探索      257

6.11.1 練習6.1:測試你掌握的知識 257

6.11.2 練習6.2:練習創建繼承層次結構       257

6.11.3 練習6.3:探索主題   258

6.12 本章小結       258

第7 章 打包和分發.NET 類型    259

7.1 NET 7 簡介      259

7.1.1 NET Core 1.0     260

7.1.2 NET Core 1.1     260

7.1.3 NET Core 2.0     260

7.1.4 NET Core 2.1     260

7.1.5 NET Core 2.2      261

7.1.6 NET Core 3.0     261

7.1.7 NET Core 3.1     261

7.1.8 NET 5.0      261

7.1.9 NET 6.0      262

7.1.10 NET 7.0       262

7.1.11 使用.NET 5 及後續版本提高性能       262

7.1.12 檢查.NET SDK 以進行更新 262

7.2 瞭解.NET 組件      263

7.2.1 程序集、NuGet 包和名稱空間 263

7.2.2 微軟.NET SDK 平臺   264

7.2.3 理解程序集中的名稱空間和類型        264

7.2.4 NuGet 包      265

7.2.5 理解框架      265

7.2.6 導入名稱空間以使用類型   266

7.2.7 將C#關鍵字與.NET 類型相關聯       266

7.2.8 使用.NET Standard 在舊平臺之間共享代碼     268

7.2.9 理解不同SDK 中類庫的默認設置        269

7.2.10 創建.NET Standard 2.0 類庫  270

7.2.11 控制.NET SDK    270

7.3 發布用於部署的代碼    271

7.3.1 創建要發布的控制台應用程序 271

7.3.2 理解dotnet 命令    273

7.3.3 獲取關於.NET 及其環境的信息        274

7.3.4 管理項目      274

7.3.5 發布自包含的應用程序   275

7.3.6 發布單文件應用    276

7.3.7 使用app trimming 系統減小應用程序的大小    277

7.4 反編譯.NET 程序集    278

7.4.1 使用Visual Studio 2022 的ILSpy

擴展進行反編譯    278

7.4.2 使用Visual Studio 2022 查看源鏈接       283

7.4.3 不能在技術上阻止反編譯   283

7.5 為NuGet 分發打包自己的庫  284

7.5.1 引用NuGet 包      284

7.5.2 為NuGet 打包庫    285

7.5.3 使用工具探索NuGet 包   289

7.5.4 測試類庫包      290

7.6 從.NET Framework 移植到現代.NET       290

7.6.1 能移植嗎      291

7.6.2 應該移植嗎     291

7.6.3 NET Framework 和現代.NET的區別       292

7.6.4 NET 可移植性分析器   292

7.6.5 NET 升級助手     292

7.6.6 使用非.NET Standard 類庫  292

7.7 使用預覽特性      294

7.7.1 需要預覽特性     294

7.7.2 使用預覽特性     294

7.8 實踐和探索       295

7.8.1 練習7.1:測試你掌握的知識 295

7.8.2 練習7.2:探索主題    295

7.8.3 練習7.3:探索PowerShell  295

7.9 本章小結       296

第8 章 使用常見的.NET 類型    297

8.1 處理數字       297

8.1.1 處理大的整數     298

8.1.2 處理復數      298

8.1.3 理解四元數     299

8.1.4 為游戲和類似應用程序生成隨機數       299

8.2 處理文本       300

8.2.1 獲取字符串的長度     300

8.2.2 獲取字符串中的字符    301

8.2.3 拆分字符串     301

8.2.4 獲取字符串的一部分    301

8.2.5 檢查字符串的內容     302

8.2.6 連接、格式化和其他的字符串成員     302

8.2.7 高效地連接字符串     304

8.3 模式匹配與正則表達式    304

8.3.1 檢查作為文本輸入的數字   304

8.3.2 改進正則表達式的性能   305

8.3.3 正則表達式的語法     305

8.3.4 正則表達式示例    306

8.3.5 拆分使用逗號分隔的復雜字符串       307

8.3.6 激活正則表達式語法著色   308

8.3.7 使用源生成器提高正則表達式的性能     311

8.4 在集合中存儲多個對象    312

8.4.1 所有集合的公共特性   313

8.4.2 通過確保集合的容量來提高性能      314

8.4.3 理解集合的選擇    314

8.4.4 使用列表      317

8.4.5 使用字典      319

8.4.6 使用隊列      320

8.4.7 集合的排序      322

8.4.8 使用專門的集合    322

8.4.9 使用不可變集合    323

8.4.10 集合的最佳實踐    323

8.5 使用Span、索引和範圍   324

8.5.1 通過Span 高效地使用內存   324

8.5.2 用索引類型標識位置   324

8.5.3 使用Range 類型標識範圍  325

8.5.4 使用索引、範圍和Span   325

8.6 使用網絡資源      326

8.6.1 使用URI、DNS 和IP 地址   326

8.6.2 ping 服務器      327

8.7 實踐和探索       328

8.7.1 練習8.1:測試你掌握的知識 328

8.7.2 練習8.2:練習正則表達式  329

8.7.3 練習8.3:練習編寫擴展方法 329

8.7.4 練習8.4:探索主題    329

8.8 本章小結       330

第9 章 處理文件、流和序列化   331

9.1 管理文件系統      331

9.1.1 處理跨平臺環境和文件系統  331

9.1.2 管理驅動器      333

9.1.3 管理目錄      334

9.1.4 管理文件      335

9.1.5 管理路徑      336

9.1.6 獲取文件信息     337

9.1.7 控制處理文件的方式    338

9.2 用流來讀寫       338

9.2.1 理解抽象和具體的流    338

9.2.2 寫入文本流     340

9.2.3 寫入XML 流     342

9.2.4 壓縮流       344

9.2.5 使用tar 存檔文件    346

9.2.6 讀寫tar 條目      350

9.3 編碼和解碼文本      350

9.3.1 將字符串編碼為字節數組   351

9.3.2 對文件中的文本進行編碼和解碼       353

9.3.3 使用隨機訪問句柄讀寫文本  353

9.4 序列化對象圖      354

9.4.1 序列化為XML     354

9.4.2 生成緊湊的XML    356

9.4.3 反序列化XML 文件   357

9.4.4 用JSON 序列化    358

9.4.5 高性能的JSON 處理   359

9.5 控制處理JSON 的方式    360

9.5.1 用於處理HTTP 響應的新的

JSON 擴展方法     363

9.5.2 從Newtonsoft 遷移到新的JSON      363

9.6 實踐和探索       363

9.6.1 練習9.1:測試你掌握的知識 363

9.6.2 練習9.2:練習序列化為XML  364

9.6.3 練習9.3:探索主題    364

9.7 本章小結       365

第10 章 使用Entity Framework Core處理數據       366

10.1 理解現代數據庫     366

10.1.1 理解舊的實體框架    367

10.1.2 理解Entity Framework Core  367

10.1.3 理解數據庫優先和代碼優先 368

10.1.4 EF Core 7 的性能改進  368

10.1.5 使用EF Core 創建控制台

應用程序     368

10.1.6 使用示例關系數據庫   368

10.1.7 使用SQLite      369

10.1.8 為SQLite 創建Northwind示例數據庫     370

10.1.9 使用SQLiteStudio 管理Northwind 示例數據庫  371

10.1.10 為SQLite 使用輕量級的ADO.NET 提供程序   373

10.1.11 為Windows 使用SQL Server      373

10.2 設置EF Core       373

10.2.1 選擇EF Core 數據庫提供程序       373

10.2.2 連接到數據庫    374

10.2.3 定義Northwind 數據庫上下文類     374

10.3 定義EF Core 模型    375

10.3.1 使用EF Core 約定定義模型 375

10.3.2 使用EF Core 註解特性定義模型       376

10.3.3 使用EF Core Fluent API 定義模型       377

10.3.4 為Northwind 表構建EF Core模型       377

10.3.5 向Northwind 數據庫上下文類添加表      380

10.3.6 安裝dotnet-ef 工具    380

10.3.7 使用現有數據庫搭建模型  381

10.3.8 自定義逆向工程模板   384

10.3.9 配置約定前模型     384

10.4 查詢EF Core 模型    385

10.4.1 過濾結果中返回的實體  387

10.4.2 過濾和排序產品     389

10.4.3 獲取生成的SQL    390

10.4.4 記錄EF Core     391

10.4.5 使用Like 進行模式匹配  393

10.4.6 在查詢中生成隨機數   394

10.4.7 定義全局過濾器     395

10.5 使用EF Core 加載模式   396

10.5.1 使用Include 擴展方法立即加載實體     396

10.5.2 啟用延遲加載    396

10.5.3 使用Load 方法顯式加載實體       397

10.6 使用EF Core 修改數據   399

10.6.1 插入實體     399

10.6.2 更新實體     402

10.6.3 刪除實體     403

10.6.4 更高效的更新和刪除   404

10.6.5 池化數據庫環境     407

10.7 使用事務       407

10.7.1 使用隔離級別控制事務  408

10.7.2 定義顯式事務    408

10.8 定義Code First EF Core 模型 409

10.9 實踐和探索       409

10.9.1 練習10.1:測試你掌握的知識       409

10.9.2 練習10.2:練習使用不同的序列化格式導出數據   410

10.9.3 練習10.3:探索主題   410

10.9.4 練習10.4:探索NoSQL數據庫      410

10.10 本章小結       410

第11 章 使用LINQ 查詢和操作數據  411

11.1 為什麽使用LINQ    411

11.2 編寫LINQ 表達式    412

11.2.1 LINQ 的組成     412

11.2.2 使用Enumerable 類構建LINQ表達式      412

11.2.3 理解延遲執行    414

11.2.4 使用Where 擴展方法過濾實體     415

11.2.5 以命名方法為目標    417

11.2.6 通過刪除委托的顯式實例化來簡化代碼     417

11.2.7 以lambda 表達式為目標   418

11.2.8 實體的排序     418

11.2.9 按項自身排序    419

11.2.10 使用var 或指定類型聲明查詢      419

11.2.11 根據類型進行過濾   420

11.2.12 使用LINQ 處理集合和bag 421

11.3 使用LINQ 與EF Core    422

11.3.1 構建EF Core 模型   423

11.3.2 序列的過濾和排序    425

11.3.3 將序列投影到新的類型中  427

11.3.4 連接和分組序列     429

11.3.5 聚合序列     431

11.3.6 小心使用Count    433

11.3.7 使用LINQ 分頁     435

11.4 使用語法糖美化LINQ 語法  438

11.5 使用帶有並行LINQ 的多個線程       439

11.6 創建自己的LINQ 擴展方法  439

11.7 使用LINQ to XML     442

11.7.1 使用LINQ to XML生成XML      442

11.7.2 使用LINQ to XML讀取XML      443

11.8 實踐和探索      444

11.8.1 練習11.1:測試你掌握的知識       444

11.8.2 練習11.2:練習使用LINQ進行查詢     445

11.8.3 練習11.3:探索主題   445

11.9 本章小結       446

第12 章 使用ASP.NET Core 進行Web 開發      447

12.1 理解ASP.NET Core     447

12.1.1 經典ASP.NET 與現代ASP.NET Core 的對比  448

12.1.2 使用ASP.NET Core 構建網站       449

12.1.3 構建Web 服務和其他服務 450

12.2 ASP.NET Core 的新特性   450

12.2.1 ASP.NET Core 1.0   451

12.2.2 ASP.NET Core 1.1   451

12.2.3 ASP.NET Core 2.0   451

12.2.4 ASP.NET Core 2.1   451

12.2.5 ASP.NET Core 2.2   451

12.2.6 ASP.NET Core 3.0   452

12.2.7 ASP.NET Core 3.1   452

12.2.8 Blazor WebAssembly 3.2   452

12.2.9 ASP.NET Core 5.0   452

12.2.10 ASP.NET Core 6.0    453

12.2.11 ASP.NET Core 7.0    453

12.3 結構化項目       453

12.4 建立實體數據模型供本書剩餘部分章節使用     454

12.4.1 使用SQLite 創建實體模型類庫     455

12.4.2 使用SQL Server 創建實體模型類庫     462

12.4.3 測試類庫     465

12.5 瞭解Web 開發     466

12.5.1 HTTP      466

12.5.2 使用Google Chrome 瀏覽器發出HTTP 請求    468

12.5.3 瞭解客戶端Web 開發技術 470

12.6 實踐和探索       470

12.6.1 練習12.1:測試你掌握的知識       470

12.6.2 練習12.2:瞭解Web 開發中

常用的縮寫      471

12.6.3 練習12.3:探索主題   471

12.7 本章小結       471

第13 章 使用ASP.NET Core Razor Pages

構建網站       472

13.1 瞭解ASP.NET Core    472

13.1.1 創建空的ASP.NET Core項目       472

13.1.2 測試和保護網站     474

13.1.3 控制托管環境    478

13.1.4 使網站能夠提供靜態內容  479

13.2 瞭解ASP.NET Core Razor Pages        481

13.2.1 啟用Razor Pages    481

13.2.2 給Razor Pages 添加代碼   482

13.2.3 通過Razor Pages 使用共享佈局     483

13.2.4 使用後台代碼文件與Razor Pages     485

13.3 使用Entity Framework Core 與ASP.NET Core      487

13.3.1 將Entity Framework Core配置為服務     487

13.3.2 使用Razor Pages 操作數據 489

13.3.3 將依賴服務註入Razor Pages 中     490

13.4 使用Razor 類庫     491

13.4.1 禁用Visual Studio Code 的Compact Folders 功能   491

13.4.2 創建Razor 類庫     492

13.4.3 實現分部視圖以顯示單個員工       494

13.4.4 使用和測試Razor 類庫   495

13.5 配置服務和HTTP 請求管道 496

13.5.1 瞭解端點路由    496

13.5.2 配置端點路由    496

13.5.3 查看項目中的端點路由配置 496

13.5.4 配置HTTP 管道    498

13.5.5 總結關鍵的中間件擴展方法 499

13.5.6 可視化HTTP 管道    499

13.5.7 實現匿名內聯委托作為中間件      500

13.5.8 啟用對請求解壓縮的支持  501

13.6 啟用HTTP/3 支持    502

13.7 實踐和探索      504

13.7.1 練習13.1:測試你掌握的知識       504

13.7.2 練習13.2:練習建立數據驅動的網頁     504

13.7.3 練習13.3:練習為控制台應用程序構建Web 頁面  504

13.7.4 練習13.4:探索主題   505

13.8 本章小結       505

第14 章 使用MVC 模式構建網站  506

14.1 設置ASP.NET Core MVC網站        506

14.1.1 創建ASP.NET Core MVC網站       506

14.1.2 為SQL Server LocalDB 創建認證數據庫      507

14.1.3 探索默認的ASP.NET Core MVC網站       509

14.1.4 啟動MVC 網站項目   510

14.1.5 瞭解訪問者註冊     511

14.1.6 查看MVC 網站項目結構  511

14.1.7 回顧ASP.NET Core Identity數據庫      513

14.2 探索ASP.NET Core MVC網站        514

14.2.1 ASP.NET Core MVC 的初始化      514

14.2.2 MVC 的默認路由   516

14.2.3 理解控制器和操作    517

14.2.4 理解視圖搜索路徑約定  520

14.2.5 使用依賴服務進行記錄  520

14.2.6 實體和視圖模型     521

14.2.7 視圖       523

14.2.8 理解如何使用標記助手避開緩存     525

14.3 自定義ASP.NET Core MVC網站        526

14.3.1 自定義樣式     526

14.3.2 設置類別圖像    526

14.3.3 Razor 語法和表達式    526

14.3.4 定義類型化視圖     527

14.3.5 使用路由值傳遞參數   530

14.3.6 模型綁定程序    532

14.3.7 驗證模型     535

14.3.8 使用HTML 輔助方法定義視圖       537

14.3.9 使用標記助手定義視圖  538

14.3.10 跨功能過濾器    538

14.3.11 使用輸出緩存    543

14.4 查詢數據庫和使用顯示模板  547

14.5 使用異步任務提高可伸縮性  550

14.6 實踐與探索      551

14.6.1 練習14.1:測試你掌握的知識       551

14.6.2 練習14.2:通過實現類別詳細信息頁面練習實現MVC   552

14.6.3 練習14.3:理解和實現異步操作方法以提高可伸縮性  552

14.6.4 練習14.4:對MVC 控制器進行單元測試    552

14.6.5 練習14.5:探索主題   552

14.7 本章小結       552

第15 章 構建和消費Web 服務    554

15.1 使用ASP.NET Core Web API構建Web 服務     554

15.1.1 理解Web 服務縮寫詞  554

15.1.2 理解Web API 的HTTP 請求和響應      555

15.1.3 創建ASP.NET Core Web API項目       556

15.1.4 檢查Web 服務的功能  559

15.1.5 為Northwind 示例數據庫創建Web 服務     560

15.1.6 為實體創建數據存儲庫  562

15.1.7 實現Web API 控制器   565

15.1.8 配置客戶存儲庫和Web API控制器      566

15.1.9 指定問題的細節     570

15.1.10 控制XML 序列化   570

15.2 解釋和測試Web 服務   571

15.2.1 使用瀏覽器測試GET 請求 571

15.2.2 使用REST Client 擴展測試HTTP 請求     572

15.2.3 理解Swagger    575

15.2.4 使用Swagger UI 測試請求 575

15.2.5 啟用HTTP 日誌記錄   578

15.2.6 W3CLogger 支持記錄額外的請求頭      580

15.3 使用HTTP 客戶端消費Web 服務        580

15.3.1 瞭解HttpClient 類   580

15.3.2 使用HttpClientFactory 配置HTTP 客戶端    581

15.3.3 在控制器中以JSON 格式獲取客戶     581

15.3.4 啟動多個項目    583

15.3.5 啟動Web 服務和MVC 客戶端項目       585

15.4 為Web 服務實現高級功能  586

15.5 使用最小API 構建Web 服務  586

15.5.1 測試最小天氣服務    588

15.5.2 向Northwind 網站主頁添加天氣預報     588

15.6 實踐和探索       591

15.6.1 練習15.1:測試你掌握的知識       591

15.6.2 練習15.2:練習使用HttpClient創建和刪除客戶    591

15.6.3 練習15.3:探索主題   591

15.7 本章小結       591

第16 章 使用Blazor 構建用戶界面  592

16.1 理解Blazor      592

16.1.1 JavaScript     592

16.1.2 Silverlight——使用插件的C#和.NET      593

16.1.3 WebAssembly——Blazor 的目標       593

16.1.4 理解Blazor 托管模型   593

16.1.5 理解Blazor 組件    594

16.1.6 比較Blazor 和Razor    594

16.2 比較Blazor 項目模板   595

16.2.1 Blazor 服務器項目模板   595

16.2.2 理解到頁面組件的Blazor路由       600

16.2.3 運行Blazor 服務器項目模板 603

16.2.4 查看Blazor WebAssembly項目模板     604

16.3 使用Blazor 服務器構建組件 608

16.3.1 定義和測試簡單的Blazor服務器組件     608

16.3.2 將組件轉換成可路由的頁面組件     609

16.3.3 將實體放入組件     610

16.3.4 為Blazor 組件抽象服務  613

16.3.5 使用EditForm 組件定義表單 615

16.3.6 構建共享的客戶詳細信息組件       615

16.3.7 構建創建、編輯和刪除客戶的組件       617

16.3.8 測試客戶組件    619

16.4 使用Blazor WebAssembly 構建組件        619

16.4.1 為Blazor WebAssembly 配置服務器      620

16.4.2 為Blazor WebAssembly 配置客戶端      622

16.4.3 測試Blazor WebAssembly 組件和服務      624

16.5 改進Blazor WebAssembly應用程序       626

16.6 實踐和探索      626

16.6.1 練習16.1:測試你掌握的知識       626

16.6.2 練習16.2:通過創建乘法表組件進行練習    627

16.6.3 練習16.3:通過創建國家導航項進行練習     627

16.6.4 練習16.4:探索主題   628

16.7 本章小結       628

第17 章 結語        629