Startup 类的作用:
- 配置应用所需的任何服务
- 定义请求处理管道
- 配置(或注册)服务的代码添加到Startup.ConfigureServices方法中。服务是应用使用的组件。例如,Entity Framework Core上下文对象是一项服务。
- 配置请求处理管道的代码添加到Startup.Configure方法中。管道有一系列中间件组建组成。例如,中间件可能处理对静态文件的请求或将HTTP请求重定向到HTTPS。每个中间件在HttpContext上执行异步操作,然后调用管道中的下一个中间件或终止请求。
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services.AddDbContext<MovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("MovieDb")));
} public void Configure(IApplicationBuilder app)
{
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseMvc();
}
}在构建应用的主机时,系统为应用指定Startup类。在Program类的主机生成器上调用BUild时,将生成应用的主机。通常在主机生成器上调用WebHostBuilderExtensions.UseStartup<TStartup> 方法来指定Startup类;
public class Program
{
public static void Main(string[] args)
{
var host = CreateWebHostBuilder(args).Build(); using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider; try
{
var context = services.
GetRequiredService<RazorPagesMovieContext>();
context.Database.Migrate();
SeedData.Initialize(services);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred seeding the DB.");
}
} host.Run();
} public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
在 Startup类中注入依赖关系的常见用途为注入:
- IHostingEnvironment 按环境配置服务
- IConfiguration 读取配置
- ILoggerFactory 在记录器中创建Startup.ConfigureServices.
private readonly IHostingEnvironment _env;
ILogger _logger;
public Startup(IHostingEnvironment env, ILoggerFactory loggerFactory, IConfiguration configuration)
{
_env = env;
_logger = loggerFactory.CreateLogger<Filters>();
Configuration = configuration;
}
ConfigureServices方法
主机可能会在调用Startup方法之前配置某些服务。
对于需要大量设置的功能,IServiceCollection 上有 Add{Service}
扩展方法。 典型 ASP.NET Core 应用将为实体框架、标识和 MVC 注册服务:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<RazorPagesMovieContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("RazorPagesMovieContext")));
services.AddMvc(options =>
{
options.Filters.Add(new Filters(_logger));
});
}
将服务添加到服务容器,使其在应用和Configure方法中可用
Configure方法
Configure 方法用于指定应用响应 HTTP 请求的方式。可通过将中间件组建添加到IApplicationBuilder 实例来配置请求管道。
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();
}
每个Use扩展方法将一个或多个中间件组件添加到请求管道。 例如,UseMvc()扩展方法将路由中间件添加到请求管道,并将 MVC 配置为默认处理程序。
请求管道中的每个中间件组件负责调用管道中的下一个组件,或在适当情况下使链发生短路。如果中间件链中未发生短路,则每个中间件都有第二次机会再将请求发送到客户端前处理该请求。