1.前言 Core與早期版本的 ASP.NET 對比,配置應用程式的方式的 Global.asax、FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Startup.cs取代了。Program.cs作為Web應用程式的預設入口,在沒有任何修改的情況下,會調用 ...
1.前言
Core與早期版本的 ASP.NET 對比,配置應用程式的方式的 Global.asax、FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Startup.cs取代了。Program.cs作為Web應用程式的預設入口,在沒有任何修改的情況下,會調用同目錄下Startup.cs中的ConfigureServices 和 Configure方法。
2.Startup類
Startup類配置服務和應用的請求管道。Program.Main方法是應用程式的托管入口。在構建應用程式的主機(WebHost)時,系統為應用程式指定 Startup 類,而Main入口通過主機生成器(IWebHostBuilder)調用Build時,生成對應的應用程式的主機(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 當應用程式啟動時調用 Startup類
當應用程式啟動時,運行時會調用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 方法,這些方法將在應用程式啟動時被調用。下麵我們再來瞭解下這兩個方法。
3.ConfigureServices方法
用於設置應用程式所需要的服務。
●該方法可選擇定義或不定義。
●在Configure方法配置應用程式服務之前被主機(WebHost)調用。
●其中按常規設置配置選項(appsettings.json)。
對於需要大量設置的功能,IServiceCollection 上有 Add{Service} 擴展方法。 典型 ASP.NET Core 應用將為實體框架(Entity Framework)、標識(Identity)和 MVC 註冊服務:
public void ConfigureServices(IServiceCollection services) { // 添加 Entity Framework服務 services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( _Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>() .AddDefaultUI(UIFramework.Bootstrap4) .AddEntityFrameworkStores<ApplicationDbContext>(); // 添加MVC設置相容版本服務. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); // 添加應用程式服務. services.AddTransient<IEmailSender, AuthMessageSender>(); services.AddTransient<ISmsSender, AuthMessageSender>(); }
將服務添加到服務容器,使其在應用程式和Configure方法中可用。服務通過依賴關係註入(DI)或 ApplicationServices 進行解析。
4.Configure方法
用於指定應用程式響應HTTP請求的方式。
可通過將中間件(middleware)組件添加到IApplicationBuilder實例來配置請求管道。Configure方法可使用 IApplicationBuilder,但未在服務容器中註冊。托管創建 IApplicationBuilder並將其直接傳遞到Configure。
通俗點來說,Configure方法用於指定ASP.NET應用程式將如何響應每個HTTP請求,你可以配置每個請求都接受相同的響應。而更複雜的管道配置可以封裝於中間件(middleware)中,並通過擴展方法添加到IApplicationBuilder上。Configure方法必須接受一個IApplicationBuilder參數。
4.1 ASP.NET Core模板配置的管道支持:
●開發人員異常頁
●異常處理程式
●HTTP 嚴格傳輸安全性 (HSTS)
●HTTPS 重定向
●靜態文件
●一般數據保護條例 (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.總結
●Program的main方法用於創建WebHost服務,調用啟動類Startup。
●Startup中的ConfigureServices方法用於將服務註入到 IServiceCollection 服務容器中。
●Startup中的Configure方法用於應用響應HTTP請求,將中間件註冊到ApplicationBuilder中來配置請求管道。