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

 更新时间:2022年04月06日 11:10:31   作者:暗断肠  
这篇文章介绍了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<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方法

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

  • 该方法可选择定义或不定义。
  • 在Configure方法配置应用程序服务之前被主机(WebHost)调用。
  • 其中按常规设置配置选项(appsettings.json)。

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

  • 开发人员异常页
  • 异常处理程序
  • 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类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 析构函数的作用 什么是析构函数

    析构函数的作用 什么是析构函数

    这篇文章主要讲述了析构函数的概念、原理、功能以及定义格式,析构函数是C#程序设计中比较重要的概念,需要的朋友可以参考一下
    2007-12-12
  • 简单的启动窗体

    简单的启动窗体

    简单的启动窗体...
    2006-10-10
  • 初识 ASP.NET Membership 用户管理

    初识 ASP.NET Membership 用户管理

    Membership 是用做用户管理,进行身份认证使用的。通过ASP.NET Membership,我们可以创建用户、删除用户和编辑用户属性。所以这是一个实现登录相关控件的底层框架。
    2016-04-04
  • 那些年,我还在学asp.net(一) 学习笔记

    那些年,我还在学asp.net(一) 学习笔记

    那些年到此,基本学习了前端的基本知识,那些年的第四课就是asp.net,当然那时看了很多教程,比如说:天轰穿,当然天轰穿说得比较多,如面向对象,C#知识,由于当时上过C++,所以就没有看这些,直接从asp.net开始,主要是学习一下asp.net用到的一些基本控件
    2012-03-03
  • asp.net Ajax之无刷新评论介绍

    asp.net Ajax之无刷新评论介绍

    asp.net Ajax之无刷新评论介绍;需要的朋友可以参考下
    2012-11-11
  • ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)

    ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)

    ADO.NET 连接数据库字符串小结,包括Oracle、SqlServer、Access、ODBC,需要的朋友可以收藏下
    2012-04-04
  • Blazor组件事件处理功能

    Blazor组件事件处理功能

    这篇文章介绍了Blazor组件的事件处理功能,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • WPF使用ValidationRules对MVVM架构数据验证

    WPF使用ValidationRules对MVVM架构数据验证

    这篇文章介绍了WPF使用ValidationRules对MVVM架构数据验证的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • .net6引入autofac框架

    .net6引入autofac框架

    这篇文章介绍了.net6引入autofac框架的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • asp.net实例代码protected override void Render(HtmlTextWriter writer)

    asp.net实例代码protected override void Render(HtmlTextWriter wri

    把最终要输出的html压缩后再输出和最终输出前先存为html文件,如果发布最新信息了,可以打开一次default.aspx,然后他又会生成一次html
    2008-08-08

最新评论