.NET Core 的專案的底層,都是從 Console Program 開始的。就稍微比較一下透過 dotnet cli 所產生的 console program 和 empty web program 的檔案差異。
檔案差異
Program.cs
Console
1 | using System; |
Web
1 | using System; |
差異
Console 與 Web 專案架構基本上是一樣的,唯一有差異的是,Web 專案需要跑 WebHost Builder 來建立網站。
.csproj
Console
1 | <Project Sdk="Microsoft.NET.Sdk"> |
Web
1 | <Project Sdk="Microsoft.NET.Sdk.Web"> |
差異
web 專案多包含了一個 wwwroot 資料夾,及 Microsoft.AspNetCore.All 的 package。
建立WebHost
WebHost
透過 WebHost.CreateDefaultBuilder 建立一個 Microsoft.AspNetCore.Hosting.IWebHost 並在 Main 下執行
CreateDefaultBuilder
執行CreateDefaultBuilder(args) 時, WebHostBuilder 會有以下的預設值
- 使用 Kestrel 為網站伺服器
- 跟目錄為目前所在的資料夾位置
- 預設載入
appsetting.json及appsettings.[environment].json設定檔 - 如果是開發模式時,會載入 User Secrets
- 使用環境變數 (environment variables)
- 接受從命令列傳入的參數
- 當做 logging 時,會輸出到
console跟debug output - 開啟
IISIntegration - 如果是開發模式,新增例外狀況頁面
UseStartup
UseStartUp 是 IWebHostBuilder 的擴充功能,接受一個 AssemblyName 並使用 IWebHostBuilder 內部的 UseSetting 的方法新增或更新 _config 裡鍵值為WebHostDefaults.ApplicationKey 與 WebHostDefaults.StartupAssemblyKey 下,_config為一個 IConfiguration 物件。建立程式碼如下,僅供參考使用
1 | private IConfiguration _config; |
build
建立 WebHost 物件
Startup
Startup 用來設定網站會使用到的 service,參數、middleware 等。基本上都在這支程式內搞定
ConfigureServices
設定有哪些服務可以使用
1 | public void ConfigureServices(IServiceCollection services) |
ConfigureServices不一定要存在,如果有,他會在Configure前被執行- 如果要設定 Configuration options,需要在此設定
- 使用的服務需要設定時,可透過
IServiceCollection的Add[Service]的方式註冊- 如上述範例為註冊 Entity Framework、Identity、MVC
- DI 也會在
ConfigureServices裡設定
Configure
設定使用哪些服務
1 | public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) |
Congiure是用來設定 ASP.NET 應用程式會對請求,透過 middleware 組合的方式,做出一系列的動作與回應。middleware物件使用Use的方法,將物件家到在IApplicationBuilder上

初始服務
在一開始就有一些初始服務的存在,分別為
- constructor:
IHostingEnvironment,ILoggerFactory - ConfigureServices:
IServiceCollecton Configure:IApplicationBuilder、IHostingEnvironment、ILoggerFactory、IApplicationLifetime
Empty Web Template 的 startup.cs
1 | public class Startup |
在初始的專案範本裡,只有在 Configure 的地方寫了兩個功能
- 注入
IApplicationHilder與IHostingEnvironment兩個服務 - 判斷如在開發模式下,新增顯示開發者例外狀況頁面功能
- 回傳 「Hello World!」 的文字給畫面顯示
回顧
- Web 應用程式也是 Console 程式
- 使用
IWebHostBuilder的方式建立一個WebHost並將其執行起來,就可將 Console 程式變成一個網頁伺服器 - 可透過
Startup.cs的方式設定 WebHost - 所有的
Dependency Injection需要在 Startup.cs 檔案內的ConfigureServices方法做註冊動作 - .NET Core Web 是使用 middleware 的方式來設定網站會如何對連線請求做回應
- 在
Configure方法內做middleware的順序及相關功能設定