当前位置:主页 > 软件编程 > .NET代码 >

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

时间:2023-03-04 10:50:43 | 栏目:.NET代码 | 点击:

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方法

用于设置应用程序所需要的服务。

对于需要大量设置的功能,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模板配置的管道支持:

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.总结

您可能感兴趣的文章:

相关文章