本書假設(shè)讀者已經(jīng)熟悉C#和.NET的開發(fā),并且對關(guān)系型數(shù)據(jù)庫有所了解,但不要求對C#有太深入的了解。初學(xué)C#的讀者可能會發(fā)現(xiàn)有些代碼難以閱讀,因為本書不會詳細講解C#的內(nèi)容。
ASP.NET Core是一個開源跨平臺框架,用于構(gòu)建Web應(yīng)用、IoT應(yīng)用和移動后端應(yīng)用。ASP.NET Core應(yīng)用程序可以運行于 .NET Core和完整的 .NET Framework之上。全書共分9章,深入淺出地介紹了ASP.NET Core的基礎(chǔ)知識和前端UI選擇方面的知識,主要包括.NET Core的基礎(chǔ)知識及其安裝、dotnet命令、Visual Studio開發(fā)工具的安裝和使用、ASP.NET Core的原理及其組件介紹、Entity Framework Core框架、ASP.NET Core MVC框架和依賴注入等。
本書面向從未使用過ASP.NET Core和EF Core的初、中級用戶,以及想了解ASP.NET Core和EF Core的讀者,也可作為各初、高等院校師生的教學(xué)和自學(xué)叢書,以及社會相關(guān)領(lǐng)域培訓(xùn)班的教材。
自2000年6月微軟提出.NET戰(zhàn)略,經(jīng)過16年的推廣之后,在2016年推出了升級版.NET Core。這是一個真正跨平臺的框架,如今,.NET Core已經(jīng)得到了比較廣泛的認可。使用.NET開發(fā)B/S應(yīng)用程序當然首推ASP.NET Core,因為在ASP.NET Core 2.1中內(nèi)置了更多的功能。相對于ASP.NET Core 1.0,ASP.NET Core 2.x降低了學(xué)習門檻,引進了新的Razor Page用戶界面設(shè)計方式,可以很容易地與.NET Framework 4.6以上版本兼容,便于用戶輕松地把舊項目遷移到.NET Core環(huán)境上來。
ASP.NET Core由模塊化的組件構(gòu)成,是一個比ASP.NET更為精簡且模塊化的框架。ASP.NET Core不再基于System.Web.dll,而是基于一系列顆;、且有良好架構(gòu)的 NuGet包。ASP.NET Core并不只是前端技術(shù),也是后端技術(shù)。ASP.NET Core是ASP.NET開發(fā)人員需要了解的一種技術(shù),是在多種平臺上進行Web開發(fā)時可供使用的另一種全棧解決方案,以便在Windows、Mac和Linux上跨平臺地開發(fā)和運行自己的ASP.NET Core應(yīng)用程序。
本書對ASP.NET Core 2.x進行了全面講解,包括.NET Core、ASP.NET Core的原理及其組件、ASP.NET Core MVC框架和Entity Framework Core框架等,通過本書的學(xué)習可以幫助開發(fā)者走進ASP.NET Core 跨平臺開發(fā)的世界。本書側(cè)重于各種小功能的實現(xiàn),并在實現(xiàn)過程中揭示ASP.NET Core 2.x的特性。
全書共分9章,內(nèi)容如下:
第1章介紹.NET Core的基礎(chǔ)知識,并通過一個簡單的控制臺應(yīng)用介紹.NET Core。
第2章介紹.NET Core CLI的dotnet命令,并通過一些簡單示例來學(xué)習如何使用這些命令。
第3章介紹Visual Studio 2017和NuGet包,并通過一些簡單示例來學(xué)習如何使用Visual Studio 2017進行應(yīng)用開發(fā)及引用NuGet包。
第4章介紹ASP.NET Core框架。
第5章介紹Entity Framework (EF) Core框架和配置特性,并通過構(gòu)建使用EF Core的ASP.NET Core應(yīng)用程序示例來具體應(yīng)用EF Core功能。
第6章介紹ASP.NET Core MVC使用模型視圖控制器設(shè)計模式構(gòu)建 Web 應(yīng)用和 API 的豐富框架。
第7章介紹依賴注入,并通過示例來學(xué)習如何使用依賴注入。
第8章介紹Razor標記語言。
第9章介紹設(shè)計一個優(yōu)秀Web應(yīng)用程序應(yīng)注意的前端UI選擇問題,以及現(xiàn)在比較流行的幾種UI,這些UI為統(tǒng)一整個Web應(yīng)用程序的風格和減少冗余代碼提供了很好的解決方案。
讀者在閱讀完本書后能夠了解ASP.NET Core的基礎(chǔ)知識和原理,學(xué)會使用ASP.NET Core并結(jié)合EF Core開發(fā)簡單的跨平臺應(yīng)用程序。由于筆者能力有限,本書只能拋磚引玉,有未盡如人意之處,希望讀者海涵并提出寶貴意見,以期共同進步。
第1章.NET Core1
1.1.NET Core介紹1
1.1.1什么是.NET1
1.1.2什么是.NET Framework1
1.1.3什么是.NET Core2
1.2.NET Core跨平臺2
1.2.1.NET Standard3
1.2.2.NET Core的特點4
1.3.NET Core SDK下載安裝7
第2章dotnet命令12
2.1dotnet命令結(jié)構(gòu)12
2.1.1dotnet命令結(jié)構(gòu)介紹13
2.1.2dotnet命令示例14
2.2dotnet new16
2.2.1介紹16
2.2.2示例20
2.3dotnet restore22
2.4dotnet sln24
2.4.1介紹24
2.4.2示例25
2.5dotnet build27
2.5.1介紹27
2.5.2示例28
2.6dotnet pack28
2.6.1介紹28
2.6.2示例29
2.7dotnet run30
2.7.1介紹30
2.7.2示例32
2.8dotnet publish32
2.8.1介紹32
2.8.2示例34
2.9dotnet add package35
2.9.1介紹35
2.9.2示例35
2.10dotnet add reference37
2.10.1介紹37
2.10.2示例37
2.11dotnet命令綜合示例38
第3章Visual Studio 2017與NuGet44
3.1安裝 Visual Studio 201744
3.1.1檢查計算機安裝環(huán)境44
3.1.2下載 Visual Studio 201744
3.1.3運行Visual Studio 2017安裝程序45
3.1.4選擇工作負載46
3.1.5逐個選擇組件(可選)47
3.1.6安裝語言包(可選)47
3.1.7更改安裝位置(可選)48
3.1.8起始頁介紹48
3.2使用Visual Studio創(chuàng)建程序49
3.3Visual Studio功能簡介53
3.3.1菜單53
3.3.2解決方案資源管理器53
3.3.3快速啟動56
3.3.4編輯器58
3.3.5運行和調(diào)試應(yīng)用程序61
3.3.6調(diào)試代碼62
3.3.7使用重構(gòu)和 IntelliSense66
3.4NuGet簡介68
3.4.1包、創(chuàng)建者、主機和使用者之間的關(guān)系68
3.4.2包的兼容性69
3.4.3NuGet工具70
3.4.4管理依賴項70
3.4.5跟蹤引用和還原包71
3.5在Visual Studio中安裝和使用包72
3.5.1程序包管理器UI72
3.5.2程序包管理器控制臺74
3.5.3在應(yīng)用中使用Newtonsoft.Json API75
第4章ASP.NET Core簡介77
4.1為何使用 ASP.NET Core77
4.2ASP.NET Core啟動的秘密78
4.2.1ASP.NET Core啟動流程78
4.2.2宿主構(gòu)造器:WebHostBuilder79
4.2.3UseStartup〈Startup〉()80
4.2.4WebHostBuilder.Build()82
4.2.5WebHost.Initialize()85
4.2.6WebHost.Run()87
4.2.7構(gòu)建請求處理管道87
4.2.8啟動WebHost90
4.2.9啟動Server92
4.2.10啟動IHostedService93
4.3ASP.NET Core中間件94
4.3.1什么是中間件94
4.3.2中間件的運行方式94
4.3.3中間件排序96
4.3.4Use、Run和Map方法98
4.3.5內(nèi)置中間件103
4.4ASP.NET Core中的靜態(tài)文件104
4.4.1如何將靜態(tài)文件注入到項目中105
4.4.2自定義靜態(tài)文件夾107
4.4.3添加默認文件支持109
4.4.4設(shè)置HTTP響應(yīng)標頭110
4.4.5啟用目錄瀏覽112
4.5ASP.NET Core中的配置113
4.5.1配置相關(guān)的包114
4.5.2文件配置115
4.5.3XML配置120
4.5.4按環(huán)境配置121
4.5.5在Razor頁面中訪問配置122
4.5.6其他配置方式122
4.6ASP.NET Core中的日志記錄123
4.6.1日志模型三要素124
4.6.2日志記錄級別125
4.6.3將日志寫入不同的目的地126
4.6.4添加篩選功能130
4.6.5根據(jù)等級過濾日志消息131
4.6.6設(shè)置文件配置133
4.6.7作用域135
4.6.8日志記錄建議137
4.7在ASP.NET Core中使用多個環(huán)境137
4.7.1環(huán)境137
4.7.2在運行時確定環(huán)境137
4.7.3開發(fā)環(huán)境139
4.7.4生產(chǎn)環(huán)境141
4.7.5基于環(huán)境的Startup類和方法142
4.8Session詳解142
4.8.1什么是Session142
4.8.2理解Session機制143
4.8.3ASP.NET Core中的Session144
4.8.4ASP.NET Core中如何使用Session145
4.9ASP.NET Core中的緩存149
4.9.1緩存的基礎(chǔ)知識149
4.9.2將數(shù)據(jù)緩存在內(nèi)存中149
4.9.3基于SQL Server的分布式緩存158
第5章Entity Framework Core167
5.1先決條件167
5.2Visual Studio開發(fā)167
5.2.1使用 NuGet的包管理器用戶界面167
5.2.2使用 NuGet的包管理器控制臺168
5.3創(chuàng)建數(shù)據(jù)庫168
5.4EF Core的兩種編程方式170
5.5EF Core 2.0 Database First的基本使用170
5.6Entity Framework Core的實體特性177
5.6.1數(shù)據(jù)注釋特性Key178
5.6.2數(shù)據(jù)注釋特性Timestamp182
5.6.3數(shù)據(jù)注釋特性ConcurrencyCheck183
5.6.4數(shù)據(jù)注釋特性Required184
5.6.5數(shù)據(jù)注釋特性MaxLength186
5.6.6數(shù)據(jù)注釋特性MinLength187
5.6.7數(shù)據(jù)注釋特性Table188
5.6.8數(shù)據(jù)注釋特性Column191
5.6.9數(shù)據(jù)注釋特性ForeignKey193
5.6.10數(shù)據(jù)注釋特性NotMapped196
5.7EF Core 2.0 Code First199
5.8EF Core 2.0 Code First 創(chuàng)建數(shù)據(jù)庫199
5.8.1創(chuàng)建實體199
5.8.2創(chuàng)建數(shù)據(jù)庫203
5.8.3數(shù)據(jù)庫修改204
5.8.4還原遷移206
5.8.5刪除遷移207
5.8.6生成SQL腳本208
5.8.7創(chuàng)建存儲過程209
5.8.8給數(shù)據(jù)庫添加初始數(shù)據(jù)209
5.9用EF Core 2.0 Code First查詢數(shù)據(jù)214
5.9.1查詢的工作原理215
5.9.2執(zhí)行查詢215
5.9.3基本查詢216
5.9.4異步查詢217
5.9.5加載所有數(shù)據(jù)218
5.9.6加載單個實體218
5.9.7條件查詢219
5.9.8使用SQL語句查詢220
5.9.9基本SQL查詢221
5.9.10傳遞參數(shù)221
5.9.11使用SQL查詢,用LINQ編寫條件排序222
5.9.12跟蹤與非跟蹤查詢223
5.10EF Core 2.0 Code First保存數(shù)據(jù)224
5.10.1添加數(shù)據(jù)225
5.10.2修改數(shù)據(jù)228
5.10.3刪除數(shù)據(jù)230
5.10.4單個 SaveChanges中的多個操作232
5.10.5異步保存235
5.10.6使用事務(wù)235
5.10.7默認事務(wù)235
5.10.8顯式事務(wù)235
5.11EF Core 2.0 Code First處理并發(fā)沖突239
5.11.1并發(fā)沖突239
5.11.2樂觀并發(fā)239
5.11.3檢測并發(fā)沖突241
5.11.4解決并發(fā)沖突243
5.11.5使用時間戳和行級版本號246
第6章ASP.NET Core MVC253
6.1ASP.NET Core MVC概述253
6.1.1什么是 MVC模式253
6.1.2什么是ASP.NET Core MVC254
6.2ASP.NET Core中的路由259
6.2.1路由259
6.2.2路由基礎(chǔ)知識259
6.2.3路由模板263
6.2.4路由約束263
6.2.5正則表達式265
6.3ASP.NET Core中的模型綁定266
6.3.1模型綁定簡介266
6.3.2模型綁定的工作原理266
6.3.3數(shù)組綁定269
6.3.4返回帶格式的數(shù)據(jù)270
6.4ASP.NET Core MVC 中的模型驗證271
6.4.1模型驗證簡介271
6.4.2驗證特性272
6.4.3自定義驗證273
6.4.4客戶端驗證275
6.4.5遠程驗證277
6.5ASP.NET Core MVC 中的視圖279
6.5.1Razor視圖引擎279
6.5.2使用視圖的好處280
6.5.3創(chuàng)建視圖281
6.5.4控制器如何指定視圖281
6.5.5向視圖傳遞數(shù)據(jù)283
6.6ASP.NET Core 中的布局288
6.6.1什么是布局288
6.6.2指定布局290
6.6.3導(dǎo)入共享指令291
6.6.4在呈現(xiàn)每個視圖之前運行代碼292
6.7ASP.NET Core 中的標記助手293
6.7.1什么是標記助手293
6.7.2標記助手的功能294
6.7.3管理標記助手的作用域296
6.7.4標記助手的智能提示支持297
6.8ASP.NET Core 中的分部視圖299
6.8.1什么是分部視圖299
6.8.2何時使用分部視圖300
6.8.3聲明分部視圖300
6.8.4分部視圖訪問示例300
6.9ASP.NET Core 中的視圖組件304
6.9.1什么是視圖組件304
6.9.2如何創(chuàng)建視圖組件類304
6.9.3創(chuàng)建一個簡單的視圖組件305
6.9.4調(diào)用視圖組件作為標記助手308
6.9.5在控制器方法中直接調(diào)用視圖組件309
6.9.6指定視圖名稱310
6.10在ASP.NET Core MVC 中使用控制器處理請求312
6.10.1什么是控制器312
6.10.2定義操作313
6.10.3控制器響應(yīng)返回的方法313
6.11ASP.NET Core 中的過濾器314
6.11.1過濾器314
6.11.2過濾器的工作原理314
6.11.3授權(quán)過濾器315
6.11.4資源過濾器315
6.11.5操作過濾器317
6.11.6異常過濾器319
6.11.7結(jié)果過濾器321
6.11.8內(nèi)置過濾器特性322
6.11.9取消和設(shè)置短路323
6.11.10依賴關(guān)系注入324
6.11.11過濾器示例325
6.12ASP.NET Core 中的區(qū)域331
第7章依賴注入337
7.1什么是依賴注入337
7.1.1什么是依賴337
7.1.2什么是注入338
7.1.3為什么要反轉(zhuǎn)338
7.1.4何為容器340
7.2.NET Core DI341
7.2.1構(gòu)造函數(shù)注入行為341
7.2.2實例的注冊341
7.2.3實例的生命周期342
7.3DI在ASP.NET Core中的應(yīng)用349
7.3.1在Startup類中初始化351
7.3.2在控制類中使用352
7.3.3通過 HttpContext來獲取實例353
7.4在 ASP.NET Core 中將依賴項注入到視圖中354
7.4.1簡單示例354
7.4.2填充查找數(shù)據(jù)356
7.5如何替換其他的IoC容器358
7.5.1Autofac的基本使用359
7.5.2用Autofac代替原來的IoC364
7.5.3一個接口對應(yīng)多個實現(xiàn)的情況369
第8章Razor視圖373
8.1什么是Razor373
8.2Razor保留關(guān)鍵字374
8.2.1Razor關(guān)鍵字374
8.2.2C# Razor關(guān)鍵字374
8.3使用Razor語法編寫表達式375
8.3.1隱式 Razor表達式375
8.3.2顯式 Razor表達式377
8.3.3表達式的編碼378
8.4Razor代碼塊379
8.5Razor邏輯條件控制382
8.5.1if和switch條件語句382
8.5.2循環(huán)語句383
8.5.3復(fù)合語句@using385
8.5.4異常處理語句@try、catch、finally386
8.5.5加鎖語句@lock386
8.5.6注釋387
8.6指令387
8.7ASP.NET Core中的 Razor頁面介紹389
8.7.1啟用Razor頁面389
8.7.2Razor頁面介紹390
8.7.3編寫基本窗體391
8.7.4頁面的URL生成405
8.7.5針對一個頁面的多個處理程序406
第9章Web UI框架的選擇412
9.1以JQuery為核心的前端框架413
9.1.1EasyUI413
9.1.2DWZ JUI414
9.1.3LigerUI415
9.2以Bootstrap為核心的前端框架416
9.2.1HUI416
9.2.2H UI416
9.2.3Ace Admin417
9.2.4Metronic418
9.2.5AdminLTE419
9.2.6INSPINIA420
9.3以ExtJS為核心的前端框架421
參考文獻423