DoNet Core的启动过程-WebApplicationBuilder
1.前言
在NET6开始做ASP.NETCore的开发,我们首先要看的是启动过程,而WebApplication和WebApplicationBuilder 类是启动过程好不开的类,WebApplicationBuilder 来引导启动,这和前面Core的版本引导启动分为Program和Startup是不同的,.NET6及以上版本直接使用Program中引导启动,而WebApplication在Run之前,需要做4步配置,主机配置、应用程序配置、服务注册、中间件设置。
2. 主机配置
2.1. 配置WebHost
WebApplicationBuilder 的只读属性 Host 属性是一个 IHostBuilder 实例,你可以用它来配置主机相关的设置。例如,可以通过调用 Host.ConfigureHostConfiguration 方法来配置主机配置,或者通过 Host.ConfigureLogging 方法来配置日志系统。
2.2创建实例
使用 WebApplicationBuilder.CreateDefault(args) 方法可以创建一个 WebApplicationBuilder 的实例,其中 args 是命令行参数数组。该方法会默认加载一些常见的配置和服务,如环境变量、日志、配置系统等。
var builder = WebApplicationBuilder.CreateDefault(args);
2. 配置主机
WebApplicationBuilder 的 Host 属性是一个 IHostBuilder 实例,可以用它来配置主机相关的设置。例如,可以通过调用 Host.ConfigureHostConfiguration 方法来配置主机配置,或者通过 Host.ConfigureLogging 方法来配置日志系统。
builder.Host.ConfigureHostConfiguration(configHost =>
{
// 配置主机配置
configHost.AddEnvironmentVariables("PREFIX_");
});
builder.Host.ConfigureLogging(logging =>
{
// 配置日志系统
logging.AddConsole();
});
3.配置应用程序
// 添加额外的配置源
builder.Configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); // 注册服务
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
4.构建WebApplication
完成所有必要的配置和服务注册,就可以使用 Build 方法来构建 WebApplication 实例。
var app = builder.Build();
这个 WebApplication 实例包含了所有已配置的中间件、服务、路由等,并准备运行。
5.配置中间件
在构建 WebApplication 实例之后,你可以使用它来配置中间件。这通常包括错误处理、路由、认证、授权等。
if (app.Environment.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI();
} app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.Run();
6.运行应用程序
调用 Run 方法或配置其他服务器(如Kestrel)来启动并运行应用程序。直接调用了 app.Run(),它会自动启动Kestrel服务器。
总结
WebApplicationBuilder 提供了构建ASP.NET Core Web应用程序所需的大部分功能,并以一种更加集中和简洁的方式组织代码。它使得配置、服务注册和中间件设置变得更加直观和易于管理。通过这个类,可以更轻松地构建、配置和运行ASP.NET Core Web应用程序。
DoNet Core的启动过程-WebApplicationBuilder的更多相关文章
- 01 ASP.NET Core 3 启动过程(一)
ASP.NET Core 3 启动过程(一) 最近又忙于各种扯淡,今天来一个需求,明天又来一个需求,后天需求又变了,这可能是很多人遇到的情况.正在紧张的忙碌着,突然一个信息把所有计划打乱了," ...
- 《ASP.NET Core 高性能系列》ASP.NET Core的启动过程(1)
一.一切从头开始 简述:知道事情的真相就应该从头 开始,下面我们代码先行 public class Program { public static void Main(string[] args) { ...
- Asp.Net Core 3.1 的启动过程5
前言 本文主要讲的是Asp.Net Core的启动过程,帮助大家掌握应用程序的关键配置点. 1.创建项目 1.1.用Visual Studio 2019 创建WebApi项目. 这里面可以看到有两个关 ...
- ASP.NET CORE 启动过程及源码解读
在这个特殊的春节,大家想必都在家出不了们,远看已经到了回城里上班的日子,但是因为一只蝙蝠的原因导致我们无法回到工作岗位,大家可能有的在家远程办公,有些在家躺着看书,有的是在家打游戏:在这个特殊无聊的日 ...
- ASP.NET Core技术研究-探秘Host主机启动过程
当我们将原有ASP.NET 应用程序升级迁移到ASP.NET Core之后,我们发现代码工程中多了两个类Program类和Startup类. 接下来我们详细探秘一下通用主机Host的启动过程. 一.P ...
- Openfire的启动过程与session管理
说明 本文源码基于Openfire4.0.2. Openfire的启动 Openfire的启动过程非常的简单,通过一个入口初始化lib目录下的openfire.jar包,并启动一个 ...
- Android4.4 以太网和DHCP启动过程介绍
转自:http://blog.csdn.net/wlwl0071986/article/details/51451843 Android4.4已经加入了以太网的支持.现在对以太网的初始化流程.网络策略 ...
- Nginx学习笔记(六) 源码分析&启动过程
Nginx的启动过程 主要介绍Nginx的启动过程,可以在/core/nginx.c中找到Nginx的主函数main(),那么就从这里开始分析Nginx的启动过程. 涉及到的基本函数 源码: /* * ...
- Android 启动过程简析
首先我们先来看android构架图: android系统是构建在linux系统上面的. 所以android设备启动经历3个过程. Boot Loader,Linux Kernel & Andr ...
- Android 核心分析 之八Android 启动过程详解
Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...
随机推荐
- 【笔记】Oracle union all&for update锁
[笔记]Oracle union all&for update union all 在Oracle中有三种类型的集合操作 UNION:求并,重复记录只显示一次 UNION ALL:求并集,显示 ...
- 【ClickHouse 技术系列】- ClickHouse 中的嵌套数据结构
简介:本文翻译自 Altinity 针对 ClickHouse 的系列技术文章.面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被 ...
- 云上安全保护伞--SLS威胁情报集成实战
简介: 威胁情报是某种基于证据的知识,包括上下文.机制.标示.含义和能够执行的建议. 什么是威胁情报 根据Gartner对威胁情报的定义,威胁情报是某种基于证据的知识,包括上下文.机制.标示.含义和能 ...
- [FAQ] puppeteer 清空输入框的值 并 重新输入
一种方式是,清空输入框可以通过如下注入代码实现,但是可能存在 和页面本身的操作 存在优先级问题. await page.evaluate( () => document.getElementBy ...
- [Go] 有了 cast 组件, golang 类型转换从此不再困扰
在 golang 中,参数和返回值之间往往涉及 int.string.[].map 等之间的转换. 如果是手动去处理,一容易出错,二不能兼容多数类型,比较麻烦. 使用 cast,能够让代码更健壮.可维 ...
- [Go] golang 两个数组 list 的合并方式
s := append([]int{1, 2}, []int{3, 4}...) Tool:在线Golang代码运行 Cool:在线 AI 编程助手 https://stackoverflow.com ...
- 在FPGA中何时用组合逻辑或时序逻辑
在设计FPGA时,大多数采用Verilog HDL或者VHDL语言进行设计(本文重点以verilog来做介绍).设计的电路都是利用FPGA内部的LUT和触发器等效出来的电路. 数字逻辑电路分为组合逻辑 ...
- Oracle和达梦:循环执行SQL(如循环插入数据)
Oracle和达梦:循环执行SQL(如循环插入数据) 其中:WHILE i <= 100000 LOOP,10万是循环10万次 其中:i NUMBER := 1;,1是从一开始 -- 循环执行一 ...
- Linux服务器安装GaussDB 100及安装过程中常见问题解决
******************************** Gaussdb 100安装 ******************************** 1. 创建安装包目录 mkdir -p ...
- CMS垃圾收集器小实验之CMSInitiatingOccupancyFraction参数
CMS垃圾收集器小实验之CMSInitiatingOccupancyFraction参数 背景 测试CMSInitiatingOccupancyFraction参数,测试结果和我的预期不符,所以花了一 ...