一.Startup類 ASP.NET Core 應用是一個控制台應用,它在其 Program.Main 方法中創建 Web 伺服器。其中Main方法是應用的托管入口點,Main 方法調用 WebHost.CreateDefaultBuilder來創建 Web 主機,自動分配了 Kestrel Web ...
一.Startup類
ASP.NET Core 應用是一個控制台應用,它在其 Program.Main
方法中創建 Web 伺服器。其中Main方法是應用的托管入口點,Main 方法調用 WebHost.CreateDefaultBuilder來創建 Web 主機,自動分配了 Kestrel Web 伺服器。IWebHostBuilder 的 Build 方法生成 IWebHost對象調用Run 方法啟動WebHost,此時托管應用並開始偵聽 HTTP 請求。代碼如下所示:
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }
1.1 應用啟動 Startup類
IWebHostBuilder類的UseStartup調用啟動類,按照約定命名為 Startup,該類必須是公共類,用於定義請求處理管道和配置應用所需的任何服務。當應用啟動時會調用 ConfigureServices
和 Configur
e兩個方法。ConfigureServices
用於註入服務, Configure用於響應HTTP請求。
public class Startup { // Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { ... } // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { ... } }
1.2 ConfigureServices方法
ConfigureServices 方法負責註入服務。該方法在WebHost的Configure方法之前被調用,將服務添加到服務容器使得它們可以通過依賴註入在應用程式中使用,在webHost啟動之前會載入該方法中的服務。典型模式是調用Add{service}方法註入服務,然後調用所有 services.Configure{Service} 方法。註入服務後,使其在應用和 Configure 方法中使用服務。在參數IServiceCollection (服務容器)上有 Add[Service] 擴展方法,用於添加自帶的framework框架服務(例如添加EF,identity,mvc服務)也可以在IServiceCollection上註入自定義服務。
public void ConfigureServices(IServiceCollection services) { //註入 Razor Pages 和 MVC 需要的服務 services.AddMvc(); }
1.3 Configure方法
Configure方法用於指定應用響應 HTTP 請求的方式。可將中間件註冊到IApplicationBuilder 實例來配置請求管道。下麵示例註冊的中間件包括: ExceptionHandler異常/錯誤處理、HttpsRedirection重定向、StaticFiles靜態文件伺服器、CookiePolicy策略實施、mvc等中間件。每一個use開頭的擴展方法將一個中間件添加到IApplicationBuilder請求管道中。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseMvc(); }
總結: (1) Program的main方法用於創建WebHost服務,調用啟動類Startup。
(2) Startup中的ConfigureServices方法用於將服務註入到 IServiceCollection 服務容器中。
(3) Startup中的Configure方法用於應用響應 HTTP 請求,將中間件註冊到 ApplicationBuilder中來配置請求管道。
參考文獻:
https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/startup?view=aspnetcore-2.1