ASP.NET Core 3.1 中的Startup類


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 方法簽名中指定其他服務,如 IWebHostEnvironmentILoggerFactory 或 ConfigureServices 中定義的任何內容。 如果這些服務可用,則會被注入。

      有關如何使用 IApplicationBuilder 和中間件處理順序的詳細信息,請參閱 ASP.NET Core 中間件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM