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类的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持代码网。
发表评论