2020/01/26, ASP.NET Core 3.1, VS2019
摘要:基於ASP.NET Core 3.1 WebApi搭建后端多層網站架構【1-項目結構分層建立】
本章節介紹了本項目的分層結構,建立了各層級的類庫,修改網站項目的啟動配置
新建解決方案
- 新建空白解決方案
MSDemo - 建立以下解決方案文件夾:

一個解決方案文件夾相當於一個層級,解決方案下是src和tests。而src下分了七個層級,並且每個層級向上依賴,不會出現2.WebCore中的內容依賴5.Model中的內容。
下面在每個層級中新建類庫或應用程序,簡單介紹每個層級的作用。
層級介紹
1.Common中主要放置一些公共的基礎庫(例如雪花算法、擴展方法等)
2.WebCore中是網站數據庫實體類、網站核心配置(例如跨域配置、多語言配置等)
3.DbAccess中是數據庫實體類映射配置、封裝工作單元倉儲設計類庫
4.Component中放置一些Web組件,例如Aop動態代理、Jwt授權驗證等
5.Model中放置Automapper的映射配置、ViewModel、DTO等內容
6.Business主要是業務內容
7.WebHost就是WebApi所在層級
說明:
- 6、7之間也可以多加一層Middleware中間件層級(如有需要的話)
- WebHost不僅僅可以放WebApi,一樣可以放置WebMVC網站
- 主要思路是想遵循嚴格的下級依賴上級,分層層次清晰易於理解,各層級職責明確
- 為什么有Component這一層?這一層里的內容其實和中間件很類似,但是按我的設計是可替換的,例如Jwt組件,如果不用Jwt,可以不加上去。而中間件內的東西是與網站強相關的
src項目建立
在解決方案所在文件夾下,建立src文件夾,src下所有項目都放在這個路徑下。
類庫配置如下圖,后面幾個類庫除了名字不同,都是一樣的路徑:

在1.Common中新建.NET Core類庫,取名為MS.Common,一些公用的基礎方法就封裝在這里面。
在2.WebCore中新建.NET Core類庫,取名為MS.Entities,里面存放數據庫實體類
在2.WebCore中新建.NET Core類庫,取名為MS.WebCore,里面存放網站核心的一些配置,依賴MS.Common項目
在3.DbAccess中新建.NET Core類庫,取名為MS.UnitOfWork,里面是工作單元與倉儲設計
在3.DbAccess中新建.NET Core類庫,取名為MS.DbContexts,里面存放實體類映射配置和數據庫上下文,依賴MS.Entities、MS.UnitOfWork項目
在4.Component中新建.NET Core類庫,取名為MS.Component.Aop,實現Aop動態代理,依賴MS.WebCore項目
在4.Component中新建.NET Core類庫,取名為MS.Component.Jwt,實現Jwt驗證授權,依賴MS.WebCore、MS.Entities兩個項目
在5.Model中新建.NET Core類庫,取名為MS.Models,實現存放AutoMapper映射配置、ViewModel和DTO,依賴MS.Component.Jwt、MS.DbContexts兩個項目
在6.Business中新建.NET Core類庫,取名為MS.Services,是主要的業務實現,依賴MS.Models項目
在7.WebHost中新建ASP.NET Core Web應用程序,取名為MS.WebApi,取消HTTPS配置,依賴MS.Services、MS.Component.Aop兩個項目
將MS.WebApi網站設為項目啟動項
建立完成后,解決方案如下圖:

十個項目都是.NET Core 3.1目標框架,並且十個項目都在src文件夾中:

編輯網站啟動配置
打開MS.WebApi-Properties-launchSettings.json文件,編輯網站啟動配置:

刪除IIS Express節點配置,並將MS.WebApi節點中,launchBrowser值改為false,此時,網站項目將使用Kestrel內核啟動,不使用IIS Express,不啟動瀏覽器,僅有個控制台程序:

打開Postman,New Collection-輸入名稱MSDemo

在MSDemoCollection中Add Requst,名稱填寫weatherforecast,添加完成后,輸入URL:http://localhost:5000/weatherforecast后回車:

可以看到請求成功。
總結
使用Kestrel內核啟動Web服務器,而不是使用IIS Express,關於這兩種托管模式,可以看老張的哲學出品的ASP.NET Core 學習視頻教程,P4-兩種托管模式(注意是第四P)
在使用Postman過程中,建立了Collection,再在Collection中Add Requst請求,為的是:
- 方便一個項目的請求都在一個集合中
- 后期會添加授權驗證,用戶登錄后,會得到一個Token,之后的請求中,都要附帶上Token,使用Collection后,用戶登錄完成,把Token加入到Collection,則Collection中每個請求都會自動附帶上該Token
