精通 ASP.NET Core MVC, 7/e (Pro ASP.NET Core MVC 2, 7/e)
內容描述
本書詳細解釋ASP.NET Core MVC的架構、功能和應用,深入闡述構建現代可擴展的Web應用程序的工具、技術和方法,揭示如何為.NET Core平臺創建輕型的移動端應用程序。本書主要內容包括MVC模式、C#基本特性、Razor、Visual Studio、MVC應用程序的單元測試、實際應用程序的創建、URL路由、高級路由特性、控制器、依賴註入、過濾器、API控制器、視圖、視圖組件、標簽助手、模型綁定、模型驗證、ASP.NET Core Identity、模型約定和操作約束等。
本書適合.NET開發人員和 Web開發人員閱讀,也可供電腦相關專業的師生閱讀。
目錄大綱
目錄
第一部分ASP.NET Core MVC
第1章ASP.NET Core MVC背景2
1.1 ASP.NET Core MVC的歷史2
1.1.1 ASP.NET Web Forms 2
1.1.2起初的MVC框架3
1.2 ASP.NET Core 3
1.2.1 ASP.NET Core MVC 2的新特性4
1.2.2 ASP.NET Core MVC的主要優點4
1.3預備知識6
1.4本書的結構6
1.5如何獲取本書的示例代碼6
1.6聯繫作者6
1.7小結7
第2章個MVC應用程序8
2.1安裝Visual Studio 8
2.2安裝.NET Core 2.0 SDK 9
2.3創建新的ASP.NET Core MVC項目9
2.3.1添加控制器11
2.3.2理解路由13
2.4渲染頁面14
2.4.1創建並渲染視圖14
2.4.2添加動態輸出16
2.5創建一個簡單的數據錄入程序17
2.5.1設置場景17
2.5.2設計數據模型18
2.5.3創建二個操作和強類型視圖18
2.5.4鏈接操作方法19
2.5.5建立表單20
2.5.6接收表單數據21
2.5.7顯示響應25
2.5.8添加驗證27
2.5.9設置內容樣式31
2.6小結35
第3章MVC模式、項目與約定36
3.1 MVC簡史36
3.2 MVC模式36
3.2.1模型36
3.2.2控制器37
3.2. 3視圖37
3.2.4 MVC的ASP.NET實現37
3.3 MVC與其他模式的比較38
3.3.1 “智能UI”模式38
3.3.2理解模型-視圖架構39
3.3.3經典的3層架構39
3.3. 4 MVC的多樣性40
3.4 ASP.NET Core MVC項目40
3.4.1創建項目41
3.4.2關於MVC的約定43
3.5小結44
第4章C#基本特性45
4.1準備示例項目45
4.1.1啟用ASP.NET Core MVC 46
4.1.2創建MVC應用程序組件47
4.2運用null條件運算符48
4.2.1 null條件運算符的連接運算49
4.2 .2聯合使用null條件運算符和null合併運算符50
4.3使用自動實現屬性51
4.3.1初始化自動實現屬性51
4.3.2創建只讀的自動實現屬性52
4.4使用字符串插值53
4.5使用對象和集合初始化器54
4.6模式匹配56
4.7使用擴展方法58
4.7.1將擴展方法應用於接口59
4.7.2創建過濾擴展方法60
4.8使用Lambda表達式61
4.8.1定義函數63
4.8.2使用Lambda表達式實現方法和屬性65
4.9使用類型推斷和匿名類型66
4.10使用異步方法68
4.10.1直接使用任務69
4.10.2使用async和await關鍵字70
4.11獲取名稱71
4.12小結72
第5章使用Razor 73
5.1準備示例項目73
5.1.1定義模型74
5.1.2創建控制器74
5.1.3創建視圖75
5.2使用模型對象75
5.3使用佈局78
5.3.1創建佈局78
5.3.2使用佈局80
5.3.3應用視圖啟動文件80
5.4使用Razor表達式81
5.4.1插入數據82
5.4.2設置屬性值83
5.4.3使用條件語句84
5.4.4枚舉數組和集合85
5.5小結86
第6章使用Visual Studio 87
6.1準備示例項目87
6.1.1創建模型87
6.1.2創建控制器和視圖88
6.2管理軟件包89
6.2.1 NuGet 89
6.2.2 Bower 91
6.3迭代開發93
6.3.1修改Razor視圖93
6.3.2對C#類進行更改94
6.3.3使用瀏覽器鏈接99
6.4部署JavaScript和CSS 102
6.4.1啟用靜態內容傳遞102
6.4.2為項目添加靜態內容103
6.4.3更新視圖104
6.4.4 MVC應用程序中的打包和縮小105
6.5小結108
第7章對MVC應用程序進行單元測試109
7.1準備示例項目109
7.1.1啟用內置的標籤助手109
7.1.2為控制器添加操作方法110
7.1.3創建數據輸入表單110
7.1.4更新Index視圖111
7.2測試MVC應用程序112
7.2.1創建單元測試項目112
7.2.2創建項目引用113
7.2.3編寫並運行單元測試115
7.2.4隔離組件以進行單元測試116
7.3改進單元測試123
7.3.1參數化單元測試123
7.3.2改進假的實現126
7.4小結129
第8章SportsStore應用程序130
8.1準備開始130
8.1.1創建MVC項目130
8.1.2創建單元測試項目133
8.1.3測試和啟動應用程序134
8.2開始領域模型開發134
8.2.1創建存儲庫135
8.2. 2創建虛擬存儲庫135
8.2.3註冊存儲庫服務136
8.3顯示產品清單137
8.3.1添加一個控制器137
8.3.2添加並配置視圖138
8.3.3設置默認路由139
8.3.4運行應用程序140
8.4準備數據庫140
8.4.1安裝Entity Framework Core工具包141
8.4.2創建數據庫類141
8.4.3創建存儲庫類142
8.4.4定義連接字符串142
8.4.5配置應用程序143
8.4.6創建數據庫遷移145
8.4.7創建種子數據145
8.5添加分頁148
8.5.1顯示頁面鏈接149
8.5.2改進URL 155
8.6更改內容樣式157
8.6.1安裝Bootstrap包157
8.6.2將Bootstrap樣式應用於佈局157
8.6.3創建分部視圖159
8.7小結160
第9章SportsStore的導航161
9.1添加導航控件161
9.1.1過濾產品列表161
9.1.2優化URL結構164
9.1.3構建類別導航菜單167
9.1.4更正頁數172
9.2構建購物車174
9.2.1定義購物車模型174
9.2.2添加Add To Cart按鈕177
9.2.3啟用會話179
9.2.4實現Cart控制器180
9.2.5顯示購物車的內容181
9.3小結183
第10章完成購物車184
10.1使用服務優化購物車模型184
10.1.1創建支持存儲感知的Cart類184
10.1.2註冊服務185
10.1.3簡化Cart控制器185
10.2完成購物車功能186
10.2.1從購物車中刪除商品186
10.2.2添加購物車摘要小部件188
10.3提交訂單190
10.3.1創建模型類190
10.3.2添加結賬流程191
10.3.3實現訂單處理193
10.3.4完成Order控制器195
10.3.5顯示驗證198
10.3.6顯示摘要頁面199
10.4小結199
第11章SportsStore的管理200
11.1管理訂單200
11.1.1增強模型200
11.1.2添加操作方法和視圖201
11.2添加目錄管理203
11.2.1創建CRUD控制器203
11.2.2實現列表視圖205
11.2.3編輯商品206
11.2.4創建新的商品216
11.2.5刪除商品217
11.3小結220
第12章SportsStore的安全和部署221
12.1保護管理功能221
12.1.1創建身份標識數據庫221
12.1.2應用基本授權策略224
12.1.3創建賬戶控制器和視圖226
12.1.4測試安全策略229
12.2部署應用程序229
12.2.1創建數據庫230
12.2.2準備應用程序231
12.2.3應用數據庫遷移234
12.2.4管理數據庫填充234
12.2 .5部署應用程序237
12.3小結239
第13章使用Visual Studio Code 240
13.1設置開發環境240
13.1.1安裝Node.js 240
13.1.2檢查Node.js安裝狀態241
13.1.3安裝Git 241
13.1.4檢查Git安裝狀態241
13.1.5安裝Bower 241
13.1.6安裝.NET Core 242
13.1.7檢查.NET Core安裝狀態242
13.1.8安裝Visual Studio Code 242
13.1.9檢查Visual Studio Code安裝狀態243
13.1.10安裝Visual Studio Code的C#擴展243
13.2創建ASP.NET Code項目244
13.3使用Visual Studio Code準備項目244
13.3.1管理客戶端軟件包245
13.3.2配置應用程序246
13.3.3構建和運行項目246
13.4重新創建PartyInvites應用程序246
13.4.1創建模型和存儲庫247
13.4.2創建數據庫249
13.4.3創建控制器和視圖250
13.5 Visual Studio Code中的單元測試254
13.5.1創建單元測試254
13.5.2運行測試255
13.6小結255
第二部分ASP .NET Core MVC詳解
第14章配置應用程序257
14.1準備示例項目257
14.2配置項目259
14.2.1將包添加到項目中259
14.2.2將工具包添加到項目中261
14.3理解Program類261
14.4了解Startup類264
14.4.1了解ASP.NET服務266
14.4.2了解ASP.NET中間件268
14.4.3了解如何調用Configure方法275
14.4.4添加其他中間件278
14.5配置應用程序281
14.5.1創建JSON配置文件283
14.5.2使用配置數據284
14.5.3配置日誌記錄285
14.5.4配置依賴注入288
14.6配置MVC服務289
14.7處理複雜配置290
14.7.1創建不同的外部配置文件290
14.7.2創建不同的配置方法292
14.7.3創建不同的配置類293
14.8小結294
第15章URL路由295
15.1準備示例項目295
15.1.1創建模型類296
15.1.2創建Example控制器296
15.1.3創建視圖298
15.2介紹URL模式299
15.3創建和註冊簡單路由299
15.4定義默認值300
15.5使用靜態URL片段303
15.6定義自定義片段變量306
15.6.1使用自定義片段變量作為操作方法的參數308
15.6.2定義可選的URL片段309
15.6.3定義可變長度路由311
15.7約束路由312
15.7.1使用正則表達式約束路由314
15.7.2使用類型和值約束316
15.7.3組合約束316
15.7. 4定義自定義約束318
15.8使用特性路由320
15.8.1準備特性路由320
15.8.2應用特性路由321
15.8.3應用路由約束323
15.9小結323
第16章級路由特性324
16.1準備示例項目324
16.2在視圖中生成傳出的URL 325
16.2.1創建傳出的鏈接326
16.2.2創建非鏈接的URL 333
16.3自定義路由334
16.3.1更改路由配置335
16.3.2創建自定義路由類336
16.4使用區域344
16.4.1創建區域344
16.4.2創建區域路由345
16.4.3填充區域346
16.4.4生成區域中指向操作的鏈接347
16.5 URL模式佳實踐348
16.5.1保持URL的整潔性348
16.5.2 GET方法和POST方法:選擇合適的方法349
16.6小結349
第17章控制器和操作350
17.1準備示例項目350
17.2理解控制器353
17.3創建控制器353
17.3.1創建POCO控制器353
17.3.2使用控制器基類355
17.4接收上下文數據355
17.4.1從Context對像中接收數據356
17.4.2使用操作方法參數359
17.5生成響應360
17.5.1使用Context對像生成響應360
17.5.2理解操作結果361
17.5.3生成HTML響應362
17.5.4執行重定向369
17.5.5返回不同類型的內容374
17.5.6響應文件的內容376
17.5. 7返回和HTTP狀態碼377
17.5.8理解其他操作結果類378
17.6小結378
第18章依賴注入379
18.1準備示例項目379
18.1.1創建模型和存儲庫380
18.1.2創建控制器和視圖381
18.1.3創建單元測試項目383
18.2創建鬆散耦合的組件383
18.3 ASP.NET的依賴注入387
18.3.1準備依賴注入388
18.3.2配置服務提供者389
18.3.3對具有依賴項的控制器進行單元測試390
18.3.4使用依賴關係鏈390
18.3.5對具體類型使用依賴注入393
18.4服務的生命週期394
18.4 .1使用瞬態生命週期395
18.4.2使用作用域的生命週期398
18.4.3使用單例生命週期399
18.5使用操作注入400
18.6使用屬性注入特性401
18.7手動請求實現對象401
18.8小結402
第19章過濾器403
19.1準備示例項目403
19.1.1啟用SSL 404
19.1.2創建控制器和視圖404
19.2使用過濾器405
19.3實現過濾器408
19.4使用授權過濾器409
19.5使用操作過濾器412
19.5.1創建操作過濾器412
19.5.2創建異步操作過濾器414
19.6使用結果過濾器414
19.6.1創建結果過濾器415
19.6. 2創建異步結果過濾器416
19.6.3創建混合操作/結果過濾器417
19.7使用異常過濾器419
19.8為過濾器使用依賴注入421
19.8.1解決過濾器依賴項421
19.8.2管理過濾器的生命週期424
19.9創建全局過濾器426
19.10理解和更改過濾器的執行順序428
19.11小結430
第20章API控制器431
20.1準備示例項目431
20.1.1創建模型和存儲庫431
20.1.2創建控制器和視圖433
20.2 REST控制器的作用435
20.2.1速度問題435
20.2.2效率問題436
20.2.3開放性問題436
20.3 REST和API控制器436
20.3.1創建API控制器437
20.3.2測試API控制器440
20.3.3在瀏覽器中使用API控制器443
20.4內容格式445
20.4.1默認內容策略445
20.4.2內容協商446
20.4.3指定action數據格式448
20.4.4從路由或查詢字符串獲取數據格式449
20.4.5啟用完成內容協商450
20.4.6接收不同的數據格式451
20.5小結452
第21章視圖453
21.1準備示例項目453
21.2創建自定義視圖引擎454
21.2.1創建自定義IView 456
21.2.2創建IViewEngine實現456
21.2.3註冊自定義視圖引擎457
21.2.4測試視圖引擎458
21.3使用Razor引擎459
21.3.1準備示例項目459
21.3.2 Razor視圖461
21.4將動態內容添加到Razor視圖中463
21.4.1使用佈局部分464
21.4.2使用分部視圖468
21.4.3將JSON內容添加到視圖中469
21.5配置Razor 471
21.6小結475
第22章視圖組件476
22.1準備示例項目476
22.1.1創建模型和存儲庫476
22.1.2創建控制器和視圖478
22.1.3配置應用程序480
22.2視圖組件481
22.3創建視圖組件481
22.3.1創建POCO視圖組件482
22.3.2從ViewComponent基類派生483
22.3.3視圖組件結果484
22.3.4獲取上下文數據487
22.3.5創建異步視圖組件491
22.4創建混合的控制器/視圖組件類493
22.4.1創建混合視圖493
22.4.2應用混合類495
22.5小結495
第23章標籤助手496
23.1準備示例項目496
23.1.1創建模型和存儲庫496
23.1.2創建控制器、佈局與視圖497
23.1.3配置應用程序499
23.2創建標籤助手500
23.2.1定義標籤助手類501
23.2.2註冊標籤助手503
23.2.3使用標籤助手503
23.2.4管理標籤助手的作用域505
23.3 級標籤助手特性508
23.3.1創建縮寫元素508
23.3.2前置和追加內容與元素510
23.3.3使用依賴注入獲取視圖上下文數據512
23.3.4使用視圖模型514
23.3. 5協調標籤助手516
23.3.6輸出元素517
23.4小結518
第24章使用表單標籤助手519
24.1準備示例項目519
24.2使用form元素521
24.2.1設置form目標521
24.2.2使用防偽特性522
24.3使用input元素524
24.3.1配置input元素524
24.3.2格式化數據526
24.4使用label元素528
24.5使用select和option元素529
24.5.1使用數據源填充select元素530
24.5.2從枚舉中生成option元素531
24.6使用textarea元素535
24.7驗證表單標籤助手536
24.8小結536
第25章使用其他內置標籤助手537
25.1準備示例項目537
25.2使用宿主環境標籤助手538
25.3使用JavaScript和CSS標籤助手539
25.3.1管理JavaScript文件539
25.3.2管理CSS樣式表545
25.4使用超鏈接元素547
25.5使用圖像元素548
25.6使用數據緩存549
25.6.1設置緩存過期時間551
25.6.2使用緩存變體552
25.7小結555
第26章模型綁定556
26.1準備示例項目556
26.1.1創建模型和存儲庫556
26.1.2創建控制器和視圖558
26.1.3配置應用559
26.2理解模型綁定560
26.2.1默認綁定值561
26.2.2綁定簡單值562
26.2.3綁定複雜類型562
26.2.4綁定數組和集合570
26.3指定模型綁定源575
26.3.1選擇標準綁定源576
26.3 .2使用請求頭作為綁定源577
26.3.3使用請求體作為綁定源579
26.4小結581
第27章模型驗證582
27.1準備示例項目582
27.1.1創建模型583
27.1.2創建控制器583
27.1. 3創建佈局和視圖584
27.2理解模型驗證的需求586
27.3顯式地驗證模型586
27.3.1為用戶顯示驗證消息588
27.3.2顯示驗證消息589
27.3.3顯示屬性級驗證消息592
27.3.4顯示模型級驗證消息593
27.4使用元數據指定驗證規則595
27.5執行客戶端驗證599
27.6執行遠程驗證601
27.7小結603
第28章ASP.NET Core Identity入門604
28.1準備示例項目604
28.2設置ASP.NET Core Identity 607
28.2.1創建用戶類607
28.2.2創建數據庫上下文類608
28.2.3配置數據庫連接串608
28.2.4創建ASP.NET Core Identity數據庫610
28.3使用ASP.NET Core Identity 610
28.3.1列舉用戶賬戶610
28.3.2創建用戶612
28.3.3驗證密碼615
28.3.4驗證用戶詳情620
28.4完成管理功能624
28.4.1實現刪除功能625
28.4.2實現編輯功能626
28.5小結629
第29章應用ASP.NET Core Identity 630
29.1準備示例項目630
29.2驗證用戶630
29.2.1準備實現驗證632
29.2.2添加用戶驗證634
29.2.3測試驗證636
29.3使用角色授權用戶636
29.3.1創建與刪除角色637
29.3.2管理角色成員641
29.3.3使用角色進行授權644
29.4播種數據庫647
29.5小結650
第30章ASP.NET Core Identity進階651
30.1準備示例項目651
30.2添加自定義用戶屬性652
30.2.1準備數據庫遷移654
30.2.2測試自定義屬性655
30.3使用聲明和策略655
30.3.1聲明656
30.3.2創建聲明659
30.3.3使用策略661
30.3.4使用策略對資源授權訪問666
30.4使用第三方驗證670
30.4.1註冊Google應用670
30.4.2啟用Google驗證671
30.5小結674
第31章模型約定與操作約束675
31.1準備示例項目675
31.2使用應用程序模型和模型約定677
31.2.1理解應用程序模型678
31.2.2理解模型約定角色680
31.2.3創建模型約定680
31.2.4理解模型約定的執行順序684
31.2.5創建全局模型約定685
31.3使用操作約束686
31.3.1準備示例項目687
31.3.2操作約束的作用688
31.3.3創建操作約束689
31.3.4在操作約束中處理依賴692
31.4小結694
作者介紹
Adam Freeman 是一位經驗豐富的IT 專家,曾在一系列公司擔任級職務,後的職務是一家性銀行的&席技術官(Chief Technology Officer,CTO)和&席運營官(Chief Operating Officer , COO)。
退休以後,他喜歡寫作和長跑。
譯者簡介
郝冠軍,微軟*有價值專家,《ASP.NET 本質論》作者。
超過20 年開發經驗,擁有從前端到後端豐富的開發經驗,有多個項目的架構設計、開發和實施落經驗地,對軟件開發有著深刻理解。
孫臻,現在中國海洋大學就職,長期從事ASP.NET及相關開發,曾參與錄製“MSDN Webcast:Windows Phone 8 ”開發快速入門系列課程,現專注於ASP.NET Core及UWP 開發。
閆曉迪,微軟有價值專家,現任新西蘭某公司級開發工程師。
10餘年軟件開發經驗,涉及Web、桌面、移動、雲等多種平台和技術。
張淯易,畢業於桂林電子科技大學,獲信息與通信工程碩士學位,新一代人工智能產業聯盟隱私保護組主要會員,就職於海信數字多媒體國家重點實驗室。
主要從事人工智能領域中知識圖譜、自然語言處理、隱私保護等方向的相關工作。
著有SCI兩篇,擁有專利十餘篇,參與了IEEEP2807等大量知識圖譜、隱私保護相關的、國家標準工作。