欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

(1)Asp.Net Core应用启动Startup类简介

程序员文章站 2022-03-20 11:56:32
1.前言 Core与早期版本的 ASP.NET 对比,配置应用程序的方式的 Global.asax、FilterConfig.cs和RouteConfig.cs 都被Program.cs 和 Startup.cs取代了。Program.cs作为Web应用程序的默认入口,在没有任何修改的情况下,会调用 ......

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中来配置请求管道。