ASP.NET|ASP.NET Core应用启动Startup类简介

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(); }

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)。
【ASP.NET|ASP.NET Core应用启动Startup类简介】对于需要大量设置的功能,IServiceCollection 上有 Add{Service} 扩展方法。 典型 ASP.NET Core 应用将为实体框架(Entity Framework)、标识(Identity)和 MVC 注册服务:
public void ConfigureServices(IServiceCollection services){// 添加 Entity Framework服务services.AddDbContext(options =>options.UseSqlServer(_Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity().AddDefaultUI(UIFramework.Bootstrap4).AddEntityFrameworkStores(); // 添加MVC设置兼容版本服务.services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); // 添加应用程序服务.services.AddTransient(); services.AddTransient(); }

将服务添加到服务容器,使其在应用程序和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类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读