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