深入淺出 ASP.NET Core

梁桐銘

  • 出版商: 人民郵電
  • 出版日期: 2020-09-01
  • 定價: $834
  • 售價: 8.5$709
  • 語言: 簡體中文
  • 頁數: 696
  • ISBN: 7115541094
  • ISBN-13: 9787115541093
  • 相關分類: .NETASP.NET

下單後立即進貨 (約4週~6週)

  • 深入淺出 ASP.NET Core-preview-1
  • 深入淺出 ASP.NET Core-preview-2
深入淺出 ASP.NET Core-preview-1

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

相關主題

商品描述

本書是一本系統地介紹ASP.NET Core、Entity Framework Core以及ASP.NET Core Identity框架技術的入門圖書,旨在幫助讀者循序漸進地瞭解和掌握ASP.NET Core。本書使用ASP.NET Core從零開始搭建一個實際的項目。從基本的控制台應用程序開始,介紹ASP.NET Core基本的啟動流程,涵蓋ASP.NET Core框架中各個技術的實際應用。同時,本書也會介紹一些ASP.NET Core的高級概念。在本書中,我們會開發一個學校管理系統,其中包含清晰的操作步驟和大量的實際代碼,以幫助讀者學以致用,將ASP.NET Core的知識運用到實際的項目開發當中,最後我們會將開發的項目部署到生產環境中。通過閱讀本書,讀者將掌握使用ASP.NET Core開發Web應用程序的方法,並能夠在對新項目進行技術選型時做出戰略決策。

本書適合有一定C# 編程經驗和HTML、JavaScript基礎,並對ASP.NET Core感興趣的讀者閱讀,也可以作為高等院校相關專業的教學用書和培訓學校的教材。

 

 

作者簡介

梁桐铭,微软最有价值专家、Microsoft AI Open Hack教练、Microsoft Tech Summit 2018讲师,52ABP开源框架作者。2015年开始在国内推广ASP.NET Boilerplate Project开源框架。拥有多年开发经验与技术团队管理经验,熟悉互联网及电商业。负责过多个大型项目的开发和管理,擅长应用系统项目的规划设计、及企业解决方案的设计。

目錄大綱

第 一部分

第 1章 編程語言和 .NET的關系 2

1.1 編程語言 2

1.2 編程語言中的C#、 F#和VB.NET 2

1.3 C#與.NET 3

1.4 小結 3

第 2章 .NET平臺 4

2.1 回顧.NET發展歷史 4

2.1.1 .NET Framework 4

2.1.2 .NET Framework與Java 5

2.1.3 .NET的跨平臺之路 5

2.2 Mono神奇的跨平臺解決方案 6

2.3 .NET Standard 6

2.4 .NET Core 7

2.4.1 .NET Core的特點 7

2.4.2 .NET Core 3.1 8

2.5 .NET Core與其他平臺 8

2.5.1 .NET Core與.NET Framework 8

2.5.2 .NET Core與Mono 8

2.5.3 .NET Core與ASP .NET Core 8

2.6 ASP .NET的發展歷程 9

2.7 ASP.NET Core的未來發展 9

2.8 小結 10

第3章 .NET 5的統一整合方案 11

3.1 進化中的.NET 11

3.2 .NET 5 (.NET Core vNext) 12

3.3 .NET Core實現真正的統一開發平臺 13

3.4 小結 14

第4章 創建ASP.NET Core項目 15

4.1 ASP.NET Core 15

4.2 ASP.NET Core的特性 15

4.3 配置電腦的開發環境 17

4.3.1 下載並安裝Visual Studio 2019 17

4.3.2 下載並安裝.NET Core SDK 18

4.4 創建ASP.NET Core Web程序 18

4.5 內置的ASP.NET Core模板說明 20

4.6 小結 21

第5章 ASP.NET Core項目啟動流程 23

5.1 ASP.NET Core項目文件 23

5.2 ASP.NET Core項目的入口 25

5.3 ASP.NET Core中的進程內與進程外托管模型 26

5.3.1 進程內托管 27

5.3.2 Kestrel 28

5.3.3 CLI 28

5.4 ASP.NET Core進程外托管 29

5.5 探討幾個問題 30

5.6 小結 31

第6章 ASP.NET Core中的配置文件 33

6.1 啟動配置信息 33

6.2 通過GUI來設置launchSettings文件 35

6.3 ASP.NET Core appsettings.json文件 36

6.3.1 訪問配置信息 37

6.3.2 appsettings.json 39

6.3.3 用戶機密 39

6.3.4 環境變量 41

6.3.5 命令行參數 41

6.4 ASP.NET Core IConfiguration服務與依賴註入 42

6.5 小結 44

第7章 ASP.NET Core中的中間件及其工作原理 45

7.1 中間件 45

7.2 中間件在ASP.NET Core中的工作原理 47

7.3 配置ASP.NET Core請求處理管道 48

7.4 Configure()代碼解析 49

7.4.1 中間件掌握測試 49

7.4.2 中間件傳遞 50

7.4.3 實踐中間件的工作流程 50

7.5 小結 52

第8章 ASP.NET Core中的靜態文件中間件 54

8.1 添加靜態文件中間件 54

8.2 支持默認文件 55

8.3 自定義默認文件 56

8.4 UseFileServer中間件 56

8.5 小結 57

第9章 ASP.NET Core開發人員異常頁面 58

9.1 UseDeveloperExceptionPage中間件 58

9.2 自定義UseDeveloperExceptionPage中間件 60

9.3 UseDeveloperExceptionPage中間件如何工作 60

9.4 ASP.NET Core中的環境變量配置 61

9.5 配置ASPNETCORE_ENVIRONMENT變量 62

9.6 IWebHostEnvironment服務中的常用方法 64

9.7 小結 65

第二部分

第 10章 詳解ASP.NET Core MVC的設計模式 68

10.1 什麽是MVC 68

10.1.1 MVC如何工作 69

10.1.2 Model 70

10.1.3 View 71

10.1.4 Controller 71

10.2 在ASP.NET Core中安裝MVC 73

10.2.1 在ASP.NET Core中配置MVC 73

10.2.2 添加HomeController 74

10.3 AddMvc()和AddMvcCore()的源代碼解析 75

10.4 小結 77

第 11章 依賴註入與Student模型 78

11.1 依賴註入 78

11.2 詳細瞭解ASP.NET Core中的依賴註入 80

11.3 使用依賴註入註冊服務 81

11.4 小結 83

第 12章 從Controller傳遞內容協商數據到View 84

12.1 Controller請求及相應流程說明 84

12.1.1 從Controller中返回JSON數據 85

12.1.2 安裝Fiddler 86

12.2 在Controller中實現內容協商 86

12.3 從Controller返回View 89

12.3.1 MVC中的View 89

12.3.2 視圖文件夾結構 90

12.3.3 視圖發現 90

12.3.4 View()重載方法 93

12.4 自定義視圖發現 93

12.4.1 指定視圖文件路徑 93

12.4.2 相對視圖文件路徑 94

12.4.3 其他View()重載方法 94

12.5 從Controller傳遞數據到View 95

12.5.1 數據從Controller傳遞到View的方法 95

12.5.2 使用ViewData將數據從Controller傳遞到View 95

12.5.3 使用ViewBag將數據從Controller傳遞到View 97

12.5.4 ViewData和ViewBag的對比 98

12.5.5 在ASP.NET Core MVC中創建一個強類型視圖 98

12.6 小結 100

第 13章 完善MVC框架內容 102

13.1 為什麽需要在ASP.NET Core MVC中使用ViewModel 102

13.1.1 ViewModel示例 103

13.1.2 在Controller中使用ViewModel 103

13.1.3 在視圖中使用ViewModel 104

13.2 在ASP.NET Core MVC中實現List視圖 104

13.2.1 修改IStudentRepository中的代碼 105

13.2.2 修改MockStudentRepository中的代碼 105

13.2.3 修改HomeController中的代碼 106

13.2.4 視圖Index.cshtml中代碼的變化 106

13.3 為什麽需要佈局視圖 107

13.3.1 ASP.NET Core MVC中的佈局視圖 108

13.3.2 創建佈局視圖 109

13.3.3 使用佈局視圖 109

13.4 佈局頁面中的節點 110

13.4.1 佈局頁面示例 110

13.4.2 渲染節點 111

13.4.3 使佈局部分可選 111

13.4.4 節點的使用 112

13.5 什麽是_ViewStart.cshtml文件 113

13.5.1 ASP.NET Core MVC中的_ViewStart.cshtml文件 113

13.5.2 _ViewStart.cshtml文件支持分層 113

13.5.3 邏輯判斷調用佈局視圖 114

13.5.4 修改視圖 114

13.6 ASP.NET Core MVC中的_ViewImports.cshtml文件 116

13.7 小結 117

第 14章 ASP.NET Core MVC中的路由 118

14.1 ASP.NET Core MVC中的默認路由 119

14.2 UseMvcWithDefaultRoute()方法中的代碼 120

14.3 ASP.NET Core MVC中的屬性路由 122

14.3.1 屬性路由示例 123

14.3.2 屬性路由參數 123

14.3.3 屬性路由可選參數 124

14.3.4 控制器和操作方法名稱 125

14.3.5 屬性路由支持多層 125

14.3.6 在屬性路由中自定義路由 128

14.3.7 常規路由與屬性路由對比 129

14.4 ASP.NET Core中新增的路由中間件 129

14.4.1 路由中間件UseRouting 130

14.4.2 路由中間件UseEndpoints 131

14.5 LibMan輕量級包管理器 133

14.5.1 使用LibMan安裝Bootstrap 133

14.5.2 libman.json文件 134

14.5.3 清理和還原客戶端庫 134

14.5.4 卸載或更新客戶端庫 134

14.5.5 libman.json文件說明 135

14.5.6 在網站中自定義CSS樣式表 136

14.6 在ASP.NET Core應用程序中使用Bootstrap 136

14.6.1 Details.cshtml視圖優化 137

14.6.2 Index.cshtml視圖優化 137

14.7 小結 139

第 15章 ASP.NET Core中的TagHelper 140

15.1 導入內置TagHelper 140

15.1.1 使用TagHelper生成Link鏈接 140

15.1.2 TagHelper中的Link標簽 141

15.2 為什麽要使用TagHelper 141

15.3 Image TagHelper 144

15.3.1 瀏覽器緩存 145

15.3.2 禁用瀏覽器緩存 145

15.3.3 HTTP狀態碼中的200與302 146

15.3.4 ASP.NET Core中的Image TagHelper 146

15.3.5 驗證Image TagHelper 147

15.4 ASP.NET Core中的Environment TagHelper 148

15.4.1 設置應用程序環境的名稱 148

15.4.2 如果CDN “掛了”怎麽辦 149

15.5 使用Bootstrap給項目添加導航菜單 150

15.6 Form TagHelpers提交學生信息 153

15.6.1 場景描述 153

15.6.2 Form TagHelper 154

15.6.3 Input TagHelper 154

15.6.4 Label TagHelper 155

15.6.5 Select TagHelper 155

15.6.6 Create.cshtml中基本的HTML代碼 156

15.6.7 Bootstrap優化後的Create.cshtml的代碼 158

15.7 小結 159

第 16章 ASP.NET Core中的模型綁定與模型驗證 160

16.1 ASP.NET Core中模型綁定的簡單例子 160

16.2 在IStudentRepository接口中添加Add() 方法 162

16.2.1 在MockStudentRepository類中實現Add() 方法 163

16.2.2 HttpGet與HttpPost 163

16.2.3 運行結果 165

16.3 ASP.NET Core中的模型驗證 166

16.3.1 模型驗證示例 166

16.3.2 ModelState.IsValid屬性驗證 168

16.3.3 在視圖中顯示模型驗證錯誤 168

16.3.4 自定義模型驗證錯誤消息 169

16.3.5 ASP.NET Core內置模型驗證屬性 169

16.3.6 顯示屬性 169

16.3.7 使用多個模型驗證屬性 170

16.3.8 自定義模型驗證錯誤的顏色 170

16.4 ASP.NET Core中的Select選擇器驗證 171

16.4.1 HTML頁面中的選擇列表 171

16.4.2 使選擇列表成為必填 172

16.4.3 讓選擇列表成為真正的必需驗證 173

16.5 深入瞭解依賴註入3種服務的不同 174

16.5.1 IStudentRepository接口 174

16.5.2 Student類 175

16.5.3 MockStudentRepository倉儲服務 175

16.5.4 HomeController 176

16.5.5 創建學生信息 177

16.5.6 完善_ViewImports.cshtml 178

16.6 驗證依賴註入服務 179

16.6.1 AddSingleton()方法 179

16.6.2 AddScoped()方法 180

16.6.3 AddTransient()方法 181

16.6.4 Scoped服務、 Transient服務與Singleton服務 181

16.7 小結 182

第 17章 EntityFramework Core數據訪問與倉儲模式 183

17.1 為什麽要使用ORM 183

17.1.1 EF Core Code First模式 184

17.1.2 EF Core Database First模式 185

17.1.3 EF Core所支持的數據庫 185

17.2 單層Web應用和多層Web應用的區別 186

17.2.1 單層Web應用 186

17.2.2 多層Web應用程序——三層架構 187

17.2.3 多層Web應用程序——領域驅動設計架構 188

17.3 Microsoft.AspNetCore.App包 190

17.4 安裝Entity Framework Core 192

17.4.1 在類庫項目中安裝NuGet包 193

17.4.2 Entity Framework Core中的DbContext 194

17.4.3 在應用程序中使用DbContext 194

17.4.4 Entity Framework Core中的DbSet 195

17.5 在Entity Framework Core中使用SQL Server 195

17.5.1 AddDbContext()和AddDbContextPool()方法之間的區別 196

17.5.2 UseSqlServer()擴展方法 196

17.5.3 ASP.NET Core中的數據庫連接字符串 196

17.6 ASP.NET Core中的倉儲模式 197

17.6.1 倉儲模式簡介 197

17.6.2 倉儲模式中的接口 198

17.6.3 修改IStudentRepository接口 198

17.6.4 倉儲模式中的內存實現 199

17.6.5 Repository模式——SQL Server數據庫實現 201

17.6.6 選擇合適的倉儲實現模式 202

17.6.7 倉儲模式的優點 203

17.7 Entity Framework Core遷移功能 203

17.7.1 EF Core中的遷移 204

17.7.2 常用的Entity Framework Core遷移命令 205

17.7.3 在Entity Framework Core中創建遷移 205

17.7.4 在Entity Framework Core中更新數據庫 206

17.7.5 Entity Framework Core中的種子數據 207

17.7.6 如何啟用種子數據 207

17.7.7 更改現有的數據庫種子數據 209

17.7.8 DbContext類保持“乾凈” 210

17.8 在ASP.NET Core中同步領域模型與數據庫架構 211

17.8.1 給學生增加頭像字段 211

17.8.2 Migrations文件夾中的文件說明 212

17.8.3 _EFMigrationsHistory表的使用 212

17.8.4 如何刪除已應用的遷移記錄 212

17.8.5 刪除已應用於數據庫的遷移 213

17.9 小結 213

第 18章 學生頭像上傳與信息修改 214

18.1 修改Student模型類 215

18.1.1 視圖模型——StudentCreateViewModel 215

18.1.2 更新Create視圖中的代碼 216

18.1.3 更新Create()操作方法的代碼 219

18.1.4 學生詳情視圖頁面代碼 220

18.1.5 學生列表視圖頁面代碼 221

18.2 在ASP.NET Core MVC中完成上傳多個文件 222

18.2.1 StudentCreateViewModel文件 223

18.2.2 更新Create視圖的代碼 223

18.2.3 修改Create()操作方法 226

18.3 ASP.NET Core中的學生編輯視圖 228

18.3.1 導航到編輯視圖 228

18.3.2 編輯視圖模型 229

18.3.3 Edit() 操作方法 230

18.3.4 編輯視圖頁面 230

18.3.5 完成HttpPost的Edit()操作方法 232

18.4 枚舉的擴展方法實現 235

18.5 小結 237

第 19章 404錯誤頁與異常攔截 238

19.1 HTTP狀態碼中的4××和5×× 238

19.1.1 ASP.NET Core中的404錯誤 239

19.1.2 404錯誤信息的視圖代碼 239

19.2 統一處理ASP.NET Core中的404錯誤 240

19.2.1 404錯誤的類型 241

19.2.2 ASP.NET Core中的404錯誤示例 241

19.3 處理失敗的HTTP狀態碼 242

19.3.1 UseStatusCodePages中間件 242

19.3.2 UseStatusCodePagesWithRedirects中間件 243

19.3.3 添加ErrorController 244

19.3.4 添加NotFound視圖 245

19.4 UseStatusCodePagesWithRedirects與UseStatusCodePagesWithReExecute 245

19.4.1 UseStatusCodePagesWithRedirects中間件說明 246

19.4.2 UseStatusCodePagesWithRedirects請求處理流程 246

19.4.3 使用UseStatusCodePagesWithReExecute請求處理流程 247

19.5 ASP.NET Core中的全局異常處理 249

19.5.1 ASP.NET Core中的UseDeveloperExceptionPage中間件 249

19.5.2 ASP.NET Core中的非開發環境異常信息 250

19.5.3 ASP.NET Core中的異常處理 251

19.5.4 調整Edit()方法中的錯誤視圖 253

19.6 小結 255

第 20章 ASP.NET Core中的日誌記錄 256

20.1 ASP.NET Core中的默認日誌 256

20.2 ASP.NET Core中的日誌記錄提供程序 257

20.2.1 ASP.NET Core內置日誌記錄提供程序 257

20.2.2 ASP.NET Core的第三方日誌記錄提供程序 258

20.2.3 ASP.NET Core中默認的日誌記錄提供程序 258

20.2.4 appsettings.json文件中的LogLevel 259

20.3 在ASP.NET Core中實現記錄異常信息 261

20.3.1 Error和NotFound視圖修改 262

20.3.2 在ASP.NET Core中記錄異常信息 263

20.3.3 在ASP.NET Core中使用NLog記錄信息到文件中 267

20.3.4 在ASP.NET Core中使用NLog 267

20.4 在ASP.NET Core中LogLevel配置及過濾日誌信息 270

20.4.1 日誌等級LogLevel枚舉 270

20.4.2 ILogger方法 271

20.4.3 在ASP.NET Core中使用日誌過濾 272

20.4.4 按日誌類別(Log Category)和日誌記錄提供程序進行日誌篩選 275

20.4.5 特定環境變量中appsettings.json文件的LogLevel配置 277

20.5 小結 277

第三部分

第 21章 從零開始學ASP.NET Core Identity框架 280

21.1 ASP.NET Core Identity介紹 280

21.2 使用ASP.NET Core Identity註冊新用戶 283

21.2.1 RegisterViewModel視圖模型 284

21.2.2 賬戶控制器 284

21.2.3 註冊視圖中的代碼 285

21.2.4 添加註冊按鈕 286

21.3 UserManager和SignInManager服務 286

21.3.1 ASP.NET Core Identity中對密碼復雜度的處理 288

21.3.2 ASP.NET Core Identity密碼默認設置 289

21.3.3 覆蓋ASP.NET Core身份中的密碼默認設置 290

21.3.4 修改中文提示的錯誤信息 291

21.4 登錄狀態及註銷功能的實現 294

21.5 ASP.NET Core Identity中的登錄功能實現 295

21.5.1 LoginViewModel登錄視圖模型 295

21.5.2 登錄視圖的代碼 296

21.5.3 AccountController中的Login()操作方法 297

21.5.4 會話Cookie與持久性Cookie 298

21.6 小結 299

第 22章 授權與驗證的關系 300

22.1 ASP.NET Core中的Authorize屬性 300

22.1.1 Authorize屬性示例 300

22.1.2 ASP.NET Core中的AllowAnonymous屬性 301

22.1.3 全局應用Authorize屬性 302

22.2 登錄後重定向到指定URL 303

22.2.1 ASP.NET Core中的ReturnUrl 303

22.2.2 ReturnUrl查詢字符串示例 303

22.2.3 登錄後重定向到ReturnUrl 304

22.3 開放式重定向攻擊 305

22.3.1 什麽是開放式重定向漏洞 305

22.3.2 開放式重定向漏洞示例 305

22.4 ASP.NET Core中的客戶端驗證 307

22.4.1 服務器端驗證示例 307

22.4.2 客戶端驗證 308

22.4.3 什麽是客戶端隱式驗證 310

22.4.4 客戶端驗證如何在ASP.NET Core中工作 311

22.4.5 隱式驗證在ASP.NET Core中失效 312

22.5 在ASP.NET Core中進行遠程驗證 312

22.5.1 遠程驗證示例 313

22.5.2 ASP.NET Core遠程屬性 314

22.5.3 ASP.NET Core Ajax失效 315

22.6 ASP.NET Core中的自定義驗證屬性 315

22.6.1 自定義驗證屬性示例 315

22.6.2 在ASP.NET Core中使用自定義驗證屬性 316

22.7 小結 317

第 23章 角色管理與用戶擴展 318

23.1 擴展IdentityUser類 319

23.1.1 修改AppDbContext中的參數 321

23.1.2 生成新遷移記錄向AspNetUsers表中添加字段 321

23.1.3 在AspNetUsers表中保存自定義數據 322

23.1.4 AccountController類中Register()操作方法的修改 323

23.1.5 AllowAnonymous匿名屬性的使用 324

23.2 ASP.NET Core中的角色管理 324

23.2.1 ASP.NET Core中的RoleManager 324

23.2.2 在AdminController中添加創建新角色的代碼 325

23.2.3 創建角色視圖模型 326

23.2.4 創建角色視圖 326

23.3 在ASP.NET Core中顯示所有角色列表 328

23.4 編輯ASP.NET Core中的角色 331

23.4.1 編輯角色視圖模型 332

23.4.2 編輯角色操作方法 333

23.4.3 編輯角色視圖 335

23.5 角色管理中的用戶關聯關系 338

23.5.1 Identity中的AspNetUserRoles數據庫表關聯關系 339

23.5.2 EditUsersInRole的HttpGet操作方法 339

23.5.3 EditUsersInRole的HttpPost操作方法 340

23.5.4 EditUsersInRole視圖 341

23.6 小結 343

第 24章 角色授權與用戶管理 344

24.1 基於角色的授權 344

24.1.1 授權屬性的多個實例 345

24.1.2 基於角色授權的控制器操作方法 345

24.2 添加授權中間件UseAuthorization 346

24.3 在菜單欄上顯示或隱藏管理 347

24.4 ASP.NET Core Identity中的拒絕訪問功能 348

24.4.1 AccessDenied()操作方法 348

24.4.2 AccessDenied視圖代碼 349

24.5 獲取Identity中的用戶列表 349

24.5.1 UserManager服務的用戶訪問 350

24.5.2 ASP.NET Core列表用戶視圖 351

24.5.3 管理導航菜單 353

24.5.4 修改Register()方法 354

24.5.5 下拉菜單功能失效 355

24.6 編輯Identity中的用戶 355

24.6.1 編輯用戶視圖 355

24.6.2 EditUser()的操作方法 356

24.6.3 EditUser視圖文件 358

24.7 NotFound視圖異常 360

24.8 Identity中刪除的用戶功能 362

24.8.1 使用GET請求刪除數據 362

24.8.2 使用POST請求刪除數據 362

24.8.3 DeleteUser()方法 363

24.9 ASP.NET Core中的確認刪除功能 364

24.9.1 瀏覽器確認對話框 364

24.9.2 是和否刪除按鈕 364

24.9.3 將confirmDelete()方法添加到視圖中 366

24.10 刪除ASP.NET CoreIdentity中的角色 367

24.11 小結 369

第 25章 EF Core中的數據完整性約束 370

25.1 EF Core中的數據完整性約束 370

25.2 優化生產環境中的自定義錯誤視圖 374

25.2.1 ErrorController類 376

25.2.2 優化Error.cshtml 376

25.3 小結 378

第 26章 ASP.NET Core中的聲明授權 379

26.1 Identity中的用戶角色 379

26.1.1 視圖模型 380

26.1.2 ManageUserRoles()方法 380

26.1.3 ManageUserRoles視圖文件 382

26.2 啟用MARS與模型綁定失效 383

26.2.1 為什麽不使用foreach 384

26.2.2 for循環與foreach循環的異同點 387

26.3 聲明授權 388

26.3.1 ClaimsStore與UserClaimsViewModel類 388

26.3.2 ManageUserClaims()操作方法 389

26.3.3 ManageUserClaims視圖文件 391

26.4 小結 393

第 27章 RBAC與CABC 394

27.1 RBAC 394

27.2 CBAC 395

27.3 角色與策略的結合 396

27.4 在MVC視圖中進行角色與聲明授權 397

27.5 AccessDenied視圖的路由配置修改 399

27.6 策略授權中的ClaimType和ClaimValue 402

27.7 使用委托創建自定義策略授權 404

27.7.1 自定義復雜授權需求 406

27.7.2 自定義授權需求和處理程序 407

27.7.3 自定義需求的授權處理程序示例 408

27.7.4 多個自定義授權處理程序 411

27.8 小結 413

第 28章 Identity的賬戶中心的設計 414

28.1 第三方登錄身份提供商 414

28.1.1 第三方登錄身份提供商如何在ASP.NET Core中工作 415

28.1.2 創建Azure OAuth憑據--——客戶端ID和客戶端密鑰 416

28.1.3 在ASP.NET Core中啟用Microsoft身份驗證 418

28.1.4 集成GitHub身份驗證登錄 425

28.2 用戶機密 429

28.3 驗證賬戶信息安全 430

28.3.1 驗證電子郵箱的好處 431

28.3.2 阻止登錄未驗證的用戶登錄 431

28.3.3 電子郵箱確認令牌 435

28.3.4 第三方登錄的電子郵箱確認令牌 439

28.3.5 激活用戶郵箱 442

28.4 忘記密碼功能 444

28.5 重置密碼功能 446

28.6 小結 449

第 29章 解析部分ASP.NET Core Identity源代碼 450

29.1 解析ASP.NET Core Identity中Token的生成與驗證 450

29.2 自定義令牌類型及令牌有效期 454

29.3 ASP.NET Core中Data Protection的加密和解密示例 456

29.4 在ASP.NET Core中添加更改密碼功能 461

29.5 為第三方賬戶添加密碼 464

29.6 ASP.NET Core中的賬戶鎖定 468

29.7 小結 472

第四部分

第30章 架構 474

30.1 架構簡介 474

30.2 學校管理系統架構設計 475

30.3 EntityFramework Core中的實體關系 476

30.4 當前架構 480

30.5 小結 481

第31章 倉儲模式的最佳實踐 482

31.1 泛型倉儲的實現 482

31.2 異步編碼與同步編碼 483

31.3 IRepository接口的設計實現 484

31.4 RepositoryBase倉儲代碼的實現 489

31.5 小結 495

第32章 重構學生管理功能 496

32.1 修改HomeController中的代碼 496

32.2 學生列表排序功能 505

32.3 模糊查詢 507

32.4 一個簡單分頁的實現 509

32.5 小結 514

第33章 課程列表與分組統計功能 515

33.1 泛型分頁 515

33.2 遷移數據信息 521

33.3 課程列表 526

33.4 分部視圖 530

33.5 學生統計信息 532

33.6 Razor條件運行時編譯 534

33.7 小結 535

第34章 復雜數據類型及自動依賴註入 536

34.1 創建相關實體信息 537

34.1.1 修改Course實體信息 538

34.1.2 創建學院與調整學生課程信息 539

34.2 更新數據庫上下文及初始化內容 542

34.3 服務之間的自動註冊 552

34.4 小結 555

第35章 課程與教師的CRUD 556

35.1 EF Core中預加載的使用 556

35.2 較為復雜的預加載的使用 558

35.3 編輯課程功能 569

35.3.1 編輯課程信息 572

35.3.2 課程信息的詳情頁 575

35.3.3 刪除課程信息 577

35.4 編輯教師功能 578

35.4.1 添加教師信息 583

35.4.2 刪除教師信息 586

35.5 優化目錄結構 587

35.6 小結 588

第36章 處理並發沖突 589

36.1 並發沖突 589

36.1.1 悲觀並發(悲觀鎖) 590

36.1.2 樂觀並發(樂觀鎖) 591

36.2 添加Department的相關類 591

36.2.1 添加DepartmentsService 592

36.2.2 學院列表功能 593

36.2.3 添加詳情視圖 597

36.2.4 編輯學院信息功能 602

36.3 EF Core中的並發控制 605

36.4 小結 609

第37章 EF Core中的繼承與原生SQL語句使用 610

37.1 繼承 610

37.1.1 實現TPH繼承 611

37.1.2 執行數據庫遷移 613

37.2 執行原生SQL語句 614

37.2.1 DbSet.FromSqlRaw的使用 614

37.2.2 Database.ExecuteSqlComma的使用 615

37.2.3 執行原生SQL語句實現更新 616

37.3 小結 619

第38章 EF Core 中的數據加載與關系映射 620

38.1 EF Core中的數據加載 620

38.1.1 顯式加載 620

38.1.2 延遲加載 621

38.1.3 3種加載形式的性能區別 623

38.2 Fluent API與數據註釋 624

38.3 Entity Framework Core中的Code First關系映射約定 625

38.3.1 一對一關聯關系 626

38.3.2 一對多關聯關系 627

38.3.3 多對多關聯關系 631

38.4 小結 632

第五部分

第39章 ASP.NET Core中的Web API 634

39.1 IoT與RESTful服務 634

39.2 添加Web API服務 635

39.3 安裝Postman並調試Web API服務 639

39.3.1 測試POST請求 639

39.3.2 測試GET請求 640

39.3.3 測試PutTodoItem()方法 642

39.3.4 測試DeleteTodoItem()方法 644

39.3.5 404和400異常 644

39.4 圖形可視化的Web API幫助頁 646

39.4.1 Swagger/OpenAPI 646

39.4.2 Swashbuckle.AspNetCore入門 646

39.4.3 添加並配置Swagger中間件 647

39.4.4 獲取swagger.json失敗 648

39.4.5 調試Swagger UI 650

39.4.6 調用SwaggerGen API 654

39.5 小結 657

第40章 實踐多層架構體系 658

40.1 領域驅動設計的分層結構 658

40.2 重構MockSchoolManagement項目 659

40.2.1 添加所需類庫 661

40.2.2 添加依賴引用關系 662

40.3 遷移各類庫 663

40.3.1 各個項目文件中的引用 664

40.3.2 類庫效果圖 665

40.3.3 多程序集的依賴註入 667

40.3.4 重新生成遷移記錄及生成SQL腳本 668

40.4 小結 669

第41章 部署與發布 670

41.1 部署至IIS 670

41.1.1 IIS的安裝和配置 670

41.1.2 安裝ASP.NET Core托管模塊 672

41.1.3 啟用Web Deploy 672

41.1.4 創建IIS站點 675

41.1.5 使用Visual Studio將ASP.NET Core發布到IIS站點 676

41.2 部署至Ubuntu 678

41.2.1 Ubuntu中安裝.NET Core 679

41.2.2 安裝Nginx 679

41.2.3 編譯與發布 680

41.3 在Docker中調試運行ASP.NET Core 682

41.3.1 安裝Docker 682

41.3.2 添加Dockerfile文件 683

41.4 雲原生Azure Web App 685

41.5 小結 689

第42章 ASP.NET Core 2.2到ASP. NET Core 3.1的遷移指南 690

42.1 升級至ASP.NET Core 3.1 690

42.1.1 修改項目啟動 692

42.1.2 修改Startup 693

42.2 遷移升級後的看法 693

42.3 Visual Studio 2019插件推薦 694

42.4 小結 696