Startup
類配置服務和應用的請求管道。
Startup 類
ASP.NET Core 應用使用 Startup
類,按照約定命名為 Startup
。 Startup
類:
- 可選擇性地包括 ConfigureServices 方法以配置應用的服務 。 服務是一個提供應用功能的可重用組件。 在
ConfigureServices
中注冊服務,並通過依賴關系注入 (DI) 或 ApplicationServices 在整個應用中使用服務 。 - 包括 Configure 方法以創建應用的請求處理管道。
在應用啟動時,ASP.NET Core 運行時會調用 ConfigureServices
和 Configure
:
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } }
在構建應用主機時指定 Startup
類。 通常通過在主機生成器上調用 WebHostBuilderExtensions.UseStartup<TStartup> 方法來指定 Startup
類:
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
主機提供 Startup
類構造函數可用的某些服務。 應用通過 ConfigureServices
添加其他服務。 主機和應用服務都可以在 Configure
和整個應用中使用。
使用泛型主機 (IHostBuilder) 時,只能將以下服務類型注入 Startup
構造函數:
- IWebHostEnvironment
- IHostEnvironment
- IConfiguration
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
ConfigureServices 方法
ConfigureServices 方法:
- 可選。
- 在
Configure
方法配置應用服務之前,由主機調用。 - 其中按常規設置配置選項。
主機可能會在調用
Startup
方法之前配置某些服務。 有關詳細信息,請參閱主機。對於需要大量設置的功能,IServiceCollection 上有
Add{Service}
擴展方法。 例如,AddDbContext、AddDefaultIdentity、AddEntityFrameworkStores 和 AddRazorPages:public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>( options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddRazorPages(); }
將服務添加到服務容器,使其在應用和
Configure
方法中可用。 服務通過依賴關系注入或 ApplicationServices 進行解析。Configure 方法
Configure 方法用於指定應用響應 HTTP 請求的方式。 可通過將中間件組件添加到 IApplicationBuilder 實例來配置請求管道。
Configure
方法可使用IApplicationBuilder
,但未在服務容器中注冊。 托管創建IApplicationBuilder
並將其直接傳遞到Configure
。ASP.NET Core 模板配置的管道支持:
- 開發人員異常頁
- 異常處理程序
- HTTP 嚴格傳輸安全性 (HSTS)
- HTTPS 重定向
- 靜態文件
- ASP.NET Core MVC 和 Razor Pages
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } }
每個
Use
擴展方法將一個或多個中間件組件添加到請求管道。 例如,UseStaticFiles 配置中間件提供靜態文件。請求管道中的每個中間件組件負責調用管道中的下一個組件,或在適當情況下使鏈發生短路。
可以在
Configure
方法簽名中指定其他服務,如IWebHostEnvironment
、ILoggerFactory
或ConfigureServices
中定義的任何內容。 如果這些服務可用,則會被注入。有關如何使用
IApplicationBuilder
和中間件處理順序的詳細信息,請參閱 ASP.NET Core 中間件。