ASP.NET Core應用程序,其本質上是一個獨立的控制台應用,它並不是必須在IIS內部托管且並不需要IIS來啟動運行(而這正是ASP.NET Core跨平台的基石)。
ASP.NET Core應用程序擁有一個內置的Self-Hosted(自托管)的Web Server(Web服務器),用來處理外部請求。
不管是托管還是自托管,都離不開Host(宿主)。在ASP.NET Core應用中
通過配置並啟動一個
Host來完成應用程序的啟動和其生命周期的管理(如下圖所示)。而Host的主要的職責就是Web Server的配置和Pilpeline(請求處理管道)的構建。

通過上圖可以看出,ASP.NET Core應用程序的啟動主要包含三個步驟:
1.CreateDefaultBuilder():創建IWebHostBuilder
2.Build():IWebHostBuilder負責創建IWebHost
3.Run():啟動IWebHost
所以,
ASP.NET Core應用的啟動本質上是啟動作為宿主的WebHost對象。
用vs創建一個.net core項目后,我們從Program 類中可以看到以下代碼:
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args)=> Host.CreateDefaultBuilder(args)//開啟一個默認的通用主機Host建造者 .ConfigureAppConfiguration(bulider => { Console.WriteLine("ConfigureAppConfiguration"); }) .ConfigureServices(service => { Console.WriteLine("ConfigureServices"); }) .ConfigureLogging(sevice => { Console.WriteLine("ConfigureLogging"); }) .ConfigureHostConfiguration(service => { Console.WriteLine("ConfigureHostConfiguration"); }) .ConfigureWebHostDefaults(webBuilder => { Console.WriteLine("ConfigureWebHostDefaults"); webBuilder.UseStartup<Startup>(); }); } }
通過打印內容,可以看出執行順序如下:
1.ConfigureWebHostDefaults:注冊應用程序必要的幾個組件如配置,容器等組件
2.ConfigureHostConfiguration:配置應用程序啟動時必要的組件,比如端口,URL等,可以配置我們的內容注冊到框架里面
3.ConfigureAppConfiguration:嵌入我們自己的配置文件,供應用程序來讀取,這些配置文件可以在將來的程序運行過程中讀取
4.ConfigureServices
5.ConfigureLogging
6.Startup
7.Startup.ConfigureServices:以上幾個都是往容器里注入我們的應用組件
8.Startup.Configure:注入我們的中間件,處理HttpContext整個請求過程
