首頁 > 軟體

ASP.NET Core應用啟動Startup類簡介

2022-04-06 13:00:17

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中來設定請求管道。

到此這篇關於ASP.NET Core應用啟動Startup類的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com