ASP.NET Core WebApi(01)項目建立
- 2020 年 5 月 2 日
- 筆記
- .NET Core, .NET Core WebApi
前言:前一段時間學習了ASP.NET Core,決定寫個簡單的項目,旨在消化所學內容,並記錄過程中遇到的問題。本章是第一篇,內容為項目的建立
一、準備工作
安裝Visual Studio時,默認會安裝上.NET Core SDK;如果沒有安裝,需要到微軟官方網站下載.NET Core SDK,保證對ASP.NET Core的支援,目前版本是.NET Core 3.1,如下圖,下載安裝即可:
二、新建項目
1、打開VS,選擇ASP.NET Core Web應用程式,如下圖,如果找不到可以進行簡單的篩選:
2、我們給項目起個名字,我想實現簡單的分層,所以把解決方案名稱修改了一下,如下圖:
3、選擇.NET Core和對應的版本號,這裡我們選擇API,右邊高級中「為HTTPS配置」把勾去掉,如下圖:
4、項目建立成功,我們F5運行一下看看,介面出現的是一個天氣預報的Json數組,這裡我的瀏覽器安裝了擴展,所以看上去結構比較清晰,如下圖:
5、頁面是怎麼出現的呢?看一下項目結構,原來項目中有一個天氣預報的類和控制器方法:
三、解決方案文件說明
1、csproj文件
雙擊項目名稱,會出現了一個後綴為csproj的文件,該文件包含的是一些項目資訊,包括使用的SDK,目標框架版本資訊,包含的目錄資訊,如下圖:
2、launchsettings.json
點開Properties,會發現launchsettings.json文件,這是一個程式運行配置文件。
內部對應了兩個配置,一個是IIS Express的配置,使用該配置時,VS會調用IIS Express運行項目,我們知道IIS Express是IIS的一個「迷你」版(項目運行時右下角可見),所以文件中還包括了一些IIS的設定;另一個是項目的配置,使用該配置時會使用dotnet run來運行程式,並默認使用Kestrel來替代傳統的IIS,Kestrel支援跨平台,並且它性能更佳。
我們可以通過菜單欄中選擇進行切換,或者右擊項目選擇屬性後再調試選項頁面中切換。
3、依賴項
依賴項中我們可以手動或使用NuGet來添加一些封裝好的引用
4、appsetting.json與appsettings.Development.json
appsetting.json是應用程式配置文件,類似原先使用的WebConfig文件,裡面默認對日誌進行了一些配置。我們點開之後發現裡面還有一個appsettings.Development.json文件,這個又是什麼呢?
在實際的開發中,我們通常會配置多個環境,比如開發環境,生產環境以及模擬環境等,但是在不同的環境中,配置是不同的,比如資料庫的連接,靜態文件的是否壓縮等等。為了滿足這種需求,微軟推出了這樣的配置方式。
那麼,它們的執行順序是怎麼樣的呢?我們來看一下源碼,系統會先載入appsetting.json,再載入目前設定的環境變數,比如appsettings.Development.json(在launchsettings.json中設置,可自定義),再載入UserSecrets,再載入電腦系統的環境變數,最後載入命令行變數。所以如果在上面5個設置中都添加了相同的參數變數,那麼後執行的會覆蓋前面執行的。
5、Program
接下來我們來看一下Program.cs文件,它其實對應了一個控制台應用,系統運行後首先會進入Main方法。
來看一下具體的流程:
1、Main方法會調用下方的CreateWebHostBuilder靜態方法;
2、CreateWebHostBuilder靜態方法會調用Host對象的CreateDefaultBuilder靜態方法,在此方法中會載入一些默認的服務,包括:①使用ASP.NET Core內置的Kestrel Web Server(支援跨平台);②IIS集成(載入CLR運行時);③Log(可以在不同的地方顯示日誌資訊);④IConfiguration介面(可以通過該介面獲取項目的配置資訊,即上面提到的5類配置資訊)當然還有其他很多默認服務,如下圖:
3、 CreateWebHostBuilder靜態方法會返回一個IWebHostBuilder對象,該對象會通過UseStartUp實例化一個類載入整個Web應用的默認服務,系統默認使用的是StartUp類
6、Startup(重要)
最後我們來看一下Program中被調用的StartUp,它是系統默認的Web應用配置類。類的內部包括了其構造函數,ConfigurationServices方法和Configure方法。
1、構造函數:它獲取了一個實現了IConfiguration介面的對象,Program中我們有提到IConfiguration介面默認會被載入,也就是說我們在這邊就可以使用該對象獲取配置資訊。
2、ConfigurationServices:我們在這裡進行服務的註冊,前面有提到系統會載入一些默認的服務,其他系統默認實現好了的服務或者是我們自定義的服務,就需要我們自己在這裡進行註冊了。註冊過之後我們就可以通過依賴注入的方式進行全局的使用。像在之前的.NET Framework中我們通過AutoFac或者Unity等第三方服務實現的IOC容器就可以在這裡註冊,但是ASP.NET Core已經內置了IOC容器,我們同樣在這裡註冊就可以了。
3、Configure:我們在這裡配置Http處理請求管道中間件,來響應ASP.NET Core程式的HTTP請求。另外需要注意的是中間件的添加順序是十分重要的,比如異常處理中間件或驗證中間件要放在比較靠前的位置,否則是無意義的。我們通常使用Use開頭的方法進行註冊中間件。
最後再來看下什麼是中間件?中間件是應用程式管道中進行組裝後,可以處理請求和響應的組件。它們會按照添加的順序依次進行處理,處理完成後再依次進行返回。即前一個組件接受請求後,會將請求傳遞給下一個中間件,直至最後一個中間件處理完成後再逆序返迴響應,如下圖:
此外,每個中間件可以進行「短路」,舉個例子,第2個中間件是驗證中間件,發現請求的資訊不滿足驗證要求,就會返回,不會再繼續處理第3個中間件。
本人知識點有限,若文中有錯誤的地方請及時指正,方便大家更好的學習和交流。
本文參考了園中幾位大佬的影片內容及圖片,僅供學習和交流使用,影片地址如下:
solenovex,ASP.NET Core MVC 2.x 全面教程
solenovex,ASP.NET Core 3.x 入門影片
solenovex,使用 ASP.NET Core 3.x 構建 RESTful Web API
角落的白板報,《從零開始學ASP.NET Core與Entity Framework Core 》