ASP.NET Core應(yīng)用啟動Startup類簡介
1.前言
Core與早期版本的 ASP.NET 對比,配置應(yīng)用程序的方式的 Global.asax、FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Startup.cs取代了。Program.cs作為Web應(yīng)用程序的默認入口,在沒有任何修改的情況下,會調(diào)用同目錄下Startup.cs中的ConfigureServices 和 Configure方法。
2.Startup類
Startup類配置服務(wù)和應(yīng)用的請求管道。Program.Main方法是應(yīng)用程序的托管入口。在構(gòu)建應(yīng)用程序的主機(WebHost)時,系統(tǒng)為應(yīng)用程序指定 Startup 類,而Main入口通過主機生成器(IWebHostBuilder)調(diào)用Build時,生成對應(yīng)的應(yīng)用程序的主機(WebHost),并啟動運行(Run)。
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }
2.1 當(dāng)應(yīng)用程序啟動時調(diào)用 Startup類
當(dāng)應(yīng)用程序啟動時,運行時會調(diào)用Startup類的 ConfigureServices 和 Configure方法:
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) { ... } }
Startup類必須定義Configure方法,但是可選擇定義一個ConfigureServices 方法,這些方法將在應(yīng)用程序啟動時被調(diào)用。下面我們再來了解下這兩個方法。
3.ConfigureServices方法
用于設(shè)置應(yīng)用程序所需要的服務(wù)。
- 該方法可選擇定義或不定義。
- 在Configure方法配置應(yīng)用程序服務(wù)之前被主機(WebHost)調(diào)用。
- 其中按常規(guī)設(shè)置配置選項(appsettings.json)。
對于需要大量設(shè)置的功能,IServiceCollection 上有 Add{Service} 擴展方法。 典型 ASP.NET Core 應(yīng)用將為實體框架(Entity Framework)、標(biāo)識(Identity)和 MVC 注冊服務(wù):
public void ConfigureServices(IServiceCollection services) { // 添加 Entity Framework服務(wù) services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( _Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>() .AddDefaultUI(UIFramework.Bootstrap4) .AddEntityFrameworkStores<ApplicationDbContext>(); // 添加MVC設(shè)置兼容版本服務(wù). services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); // 添加應(yīng)用程序服務(wù). services.AddTransient<IEmailSender, AuthMessageSender>(); services.AddTransient<ISmsSender, AuthMessageSender>(); }
將服務(wù)添加到服務(wù)容器,使其在應(yīng)用程序和Configure方法中可用。服務(wù)通過依賴關(guān)系注入(DI)或 ApplicationServices 進行解析。
4.Configure方法
用于指定應(yīng)用程序響應(yīng)HTTP請求的方式。
可通過將中間件(middleware)組件添加到IApplicationBuilder實例來配置請求管道。Configure方法可使用 IApplicationBuilder,但未在服務(wù)容器中注冊。托管創(chuàng)建 IApplicationBuilder并將其直接傳遞到Configure。
通俗點來說,Configure方法用于指定ASP.NET應(yīng)用程序?qū)⑷绾雾憫?yīng)每個HTTP請求,你可以配置每個請求都接受相同的響應(yīng)。而更復(fù)雜的管道配置可以封裝于中間件(middleware)中,并通過擴展方法添加到IApplicationBuilder上。Configure方法必須接受一個IApplicationBuilder參數(shù)。
4.1 ASP.NET Core模板配置的管道支持:
- 開發(fā)人員異常頁
- 異常處理程序
- HTTP 嚴(yán)格傳輸安全性 (HSTS)
- HTTPS 重定向
- 靜態(tài)文件
- 一般數(shù)據(jù)保護條例 (GDPR)
- ASP.NET Core MVC 和 Razor Pages
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(); }
5.總結(jié)
- Program的Main方法用于創(chuàng)建WebHost服務(wù),調(diào)用啟動類Startup。
- Startup中的ConfigureServices方法用于將服務(wù)注入到IServiceCollection服務(wù)容器中。
- Startup中的Configure方法用于應(yīng)用響應(yīng)HTTP請求,將中間件注冊到ApplicationBuilder中來配置請求管道。
到此這篇關(guān)于ASP.NET Core應(yīng)用啟動Startup類的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
WPF框架Prism中ViewModelLocator用法介紹
這篇文章介紹了WPF框架Prism中ViewModelLocator的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-02-02ASP.NET?Core命名空間System.Text.Encodings.Web介紹
這篇文章介紹了ASP.NET?Core命名空間System.Text.Encodings.Web,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01WPF框架Prism中導(dǎo)航Navigation用法介紹
這篇文章介紹了WPF框架Prism中導(dǎo)航Navigation的用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02ConfiguraionSource節(jié)點及多個配置文件的應(yīng)用
ConfiguraionSource節(jié)點及多個配置文件的應(yīng)用...2007-01-01