(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中来配置请求管道。
参考文献:
(1)ASP.NET Core 应用启动Startup类简介的更多相关文章
- ASP.NET Core 应用程序Startup类介绍
Startup类配置服务和应用程序的请求管道. Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBui ...
- ASP.NET Core中的Startup类
ASP.NET Core程序要求有一个启动类.按照惯例,启动类的名字是 "Startup" .Startup类负责配置请求管道,处理应用程序的所有请求.你可以指定在Main方法中使 ...
- ASP.NET Core 应用程序Startup类介绍 (转载)
Startup类配置服务和应用程序的请求管道. Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBui ...
- asp.net core 系列之Startup
这篇文章简单记录 ASP.NET Core中 ,startup类的一些使用. 一.前言 在 Startup类中,一般有两个方法: ConfigureServices 方法: 用来配置应用的 servi ...
- asp.net core 系列 2 启动Startup类介绍
一.Startup类 ASP.NET Core 应用是一个控制台应用,它在其 Program.Main 方法中创建 Web 服务器.其中Main方法是应用的托管入口点,Main 方法调用 WebHos ...
- 如何在ASP.NET Core程序启动时运行异步任务(1)
原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...
- ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 项目配置 ( Startup ) - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 项目配置 ( Startup ) 前面几章节 ...
- 一题多解,ASP.NET Core应用启动初始化的N种方案[下篇]
[接上篇]"天下大势,分久必合,合久必分",ASP.NET应用通过GenericWebHostService这个承载服务被整合到基于IHostBuilder/IHost的服务承载系 ...
- 如何在ASP.NET Core程序启动时运行异步任务(3)
原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...
随机推荐
- gethostname、gethostbyname
gethostname():返回本地主机的标准主机名 原型: #include<unistd.h> int gethostname(char *name, size_t len); 参数说 ...
- Fix multiple GPUs fails in training Mask_RCNN
Test with: Keras: 2.2.4Python: 3.6.9Tensorflow: 1.12.0 ================== Problem: Using code from h ...
- 关于RSA汇总
写在前面 安全测试需要, 后台数据需要签名, 前台验签, 于是有了这篇hao123. 正文 jsrsasign https://github.com/kjur/jsrsasign jsrsasign使 ...
- AndroidStudio 3.5格式化xml文件出现自动改变xml元素位置问题
问题描述格式化xml时,出现自动改变了xml元素位置问题.左侧是原始的,右侧是格式化后的. 坑娘啊,这样界面就完全变了啊. 解决方案在设置里,Appearance& Behavior > ...
- Mysql创建数据库以及用户分配权限
一.创建mysql数据库 1.创建数据库语法 --创建名称为“testdb”数据库,并设定编码集为utf8 CREATE DATABASE IF NOT EXISTS testdb DEFAULT C ...
- SpringBoot项目中的全局异常处理器 Failed to invoke @ExceptionHandler method
文件下载代码 @RequestMapping(value = { "/data/docking/picture/{id}/{empi}" }) public JsonApi pic ...
- Python3基础 内置函数 dir 查询对象的方法列表
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- java中静态方法中为什么不能使用this、super和直接调用非静态方法
这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆 ...
- MacOSX 虚拟机与宿主机的网络配置
环境:MacOSX.VMware Fusion11.5.CentOS6 比较重要的两个网卡 安装虚拟机后,宿主机会多出几个网卡,其中vmnet1对应的Bridge(桥接方式),vmnet8对应NAT方 ...
- Docker-Compose简介及常用命令
1.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.Docker-Compose将所管理的容器分为三层,分别是 ...