一.Startup类
ASP.NET Core 应用是一个控制台应用,它在其 Program.Main
方法中创建 Web 服务器。其中Main方法是应用的托管入口点,Main 方法调用 WebHost.CreateDefaultBuilder来创建 Web 主机,自动分配了 Kestrel Web 服务器。IWebHostBuilder 的 Build 方法生成 IWebHost对象调用Run 方法启动WebHost,此时托管应用并开始侦听 HTTP 请求。代码如下所示:
1 public class Program 2 { 3 public static void Main(string[] args) 4 { 5 CreateWebHostBuilder(args).Build().Run(); 6 } 7 8 public static IWebHostBuilder CreateWebHostBuilder(string[] args) => 9 WebHost.CreateDefaultBuilder(args)10 .UseStartup();11 }
1.1 应用启动 Startup类
IWebHostBuilder类的UseStartup调用启动类,按照约定命名为 Startup,该类必须是公共类,用于定义请求处理管道和配置应用所需的任何服务。当应用启动时会调用 ConfigureServices
和 Configur
e两个方法。ConfigureServices
用于注入服务, Configure用于响应HTTP请求。
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) { ... }}
1.2 ConfigureServices方法
ConfigureServices 方法负责注入服务。该方法在WebHost的Configure方法之前被调用,将服务添加到服务容器使得它们可以通过依赖注入在应用程序中使用,在webHost启动之前会加载该方法中的服务。典型模式是调用Add{service}方法注入服务,然后调用所有 services.Configure{Service} 方法。注入服务后,使其在应用和 Configure 方法中使用服务。在参数IServiceCollection (服务容器)上有 Add[Service] 扩展方法,用于添加自带的framework框架服务(例如添加EF,identity,mvc服务)也可以在IServiceCollection上注入自定义服务。
public void ConfigureServices(IServiceCollection services) { //注入 Razor Pages 和 MVC 需要的服务 services.AddMvc(); }
1.3 Configure方法
Configure方法用于指定应用响应 HTTP 请求的方式。可将中间件注册到IApplicationBuilder 实例来配置请求管道。下面示例注册的中间件包括: ExceptionHandler异常/错误处理、HttpsRedirection重定向、StaticFiles静态文件服务器、CookiePolicy策略实施、mvc等中间件。每一个use开头的扩展方法将一个中间件添加到IApplicationBuilder请求管道中。
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(); }
总结: (1) Program的main方法用于创建WebHost服务,调用启动类Startup。
(2) Startup中的ConfigureServices方法用于将服务注入到 IServiceCollection 服务容器中。
(3) Startup中的Configure方法用于应用响应 HTTP 请求,将中间件注册到 ApplicationBuilder中来配置请求管道。
参考文献: