ASP.Net Core Startup類
我們瞭解了Program類如何負責建立和配置Web主機。但是,在構建和執行主機之前,Program類將呼叫startup類以進行進一步配置。它從類中呼叫Configure&ConfigureServices方法。
什麼是Startup類
ASP.NET Core 啟動(startup.cs)類是一個簡單的類,不繼承任何介面。這是我們配置請求管道和中介軟體的地方。我們還可以配置服務並將其新增到依賴項注入容器中。該類必須包含方法Configure,並且可以選擇性的包含ConfigureServices方法。
它類似於經典ASP.NET中的global.asax。
為什麼要使用Startup類?
Program類與Startup類是ASP.NET Core應用程式中最重要的兩個類。應用程式的所有配置都在這兩個檔案中進行。
配置應用程式基礎結構的Program類。
Program配置應用程式基礎設施。program類在啟動時建立web主機。然後,它配置日誌記錄DI容器。配置系統,Kestrel Web伺服器,IIS整合等。它還將框架服務新增到DI容器中,以便我們可以使用它。
Startup類的作用
Startup類是我們配置應用程式元件的地方。Startup類具有兩個主要功能。
- 配置服務以進行依賴注入。
- 它配置請求管道,管道處理對應用程式發出的所有請求。
Startup類的示例
啟動類通常命名為startup.cs。它位於專案根目錄中。Main方法是應用程式的入口點。它配置WebHost,對其進行構建並執行。然後,主機接收HTTP請求,並將其傳遞到請求管道。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
UseStartup方法指示WebHost在何處查詢Startup類。啟動類通過約定的方式命名。我們可以使用任何名稱建立一個啟動類。例如,如果我們希望將AppStartup用作Startup類,請記住將其包含在程式中
.UseStartup<AppStartup >()
啟動中可用的服務
服務 |
目的 |
IApplicationBuilder |
我們將此服務用於應用程式請求管道。 |
IHostingEnvironment |
此服務提供當前的EnvironmentName,ContentRootPath,WebRootPath和Web根檔案提供程式 |
ILoggerFactory |
提供建立記錄器的機制 |
IServiceCollection |
這是一個DI容器。我們將服務新增到此容器中。 |
方法 |
可用服務 |
Startup Constructor |
IHostingEnvironment和ILoggerFactory |
ConfigureServices |
IServiceCollection |
Configure |
IApplicationBuilder,IHostingEnvironment和ILoggerFactory |
配置服務
ConfigureServices是我們配置服務的方法。將服務新增到DI容器中。此方法是可選的。但是,如果存在,那麼它是WebHost呼叫的第一個方法。ConfigureServices方法將服務例項(型別為IServiceCollection)作為引數。 服務的例項通過依賴注入注入到ConfigureService中。
public void ConfigureServices(IServiceCollection services) {
IServiceCollection是DI容器。我們將服務新增到此容器中。
services.AddMvc();
將服務新增到DI容器將使它們可用於依賴注入。這意味著我們可以在應用程式中的任何位置注入這些服務。依賴注入是ASP.NET Core的新功能之一。ASP.NET Core廣泛使用依賴項注入。下面的示例顯示了一種典型ConfigureServices方法。
public void ConfigureServices(IServiceCollection services) {
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc();
}
Configure
Configure方法是必須的。在ConfigureServices方法之後呼叫它。configure方法允許我們配置ASP.NET Core請求管道。該請求管道指定應用程式應該如何響應HTTP請求。組成請求管道的元件稱為中介軟體。configure方法典型的配置如下所示。如果我們選擇MVC Web應用程式(MVC)模板,那麼Visual Studio生成如下的方法。
// 執行時將呼叫此方法。 使用此方法來配置HTTP請求管道。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseCors("AllowAll");
app.UseAuthentication();
app.UseMvc(routes =>
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Configure方法需要 提供IApplicationBuilder和HostingEnvironment的例項。上面的程式碼沒有注入ILoggerFactory,但是我們可以這樣做。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
然後,我們將中介軟體元件新增到IApplicationBuilder例項的例項中。第一行檢查我們是否處於開發環境中。 如果是,它將使用擴充套件方法UseDeveloperExceptionPage註冊DeveloperExceptionPage中介軟體。
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
在隨後的幾行中,我們將註冊另外三個中介軟體。
app.UseStaticFiles();
app.UseCors("AllowAll");
app.UseAuthentication();
最後一行程式碼註冊了MVC中介軟體。 在註冊中介軟體時配置了路由。
app.UseMvc(routes =>
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
configure方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
}
我們使用應用程式的run方法來註冊嵌入式中介軟體。啟動類(startup.cs)類是我們配置應用程式元件的位置。可選ConfigureServices方法是我們註冊DI服務的地方。Configure方法是我們建立請求管道的地方。然後,在構建和執行Web主機之前,CreateDefaultBuilder方法將讀取啟動內容以配置Web主機。