DoNet Core的启动过程-WebApplicationBuilder

donet,core,webapplicationbuilder · 浏览次数 : 0

小编点评

1. 前言 在NET6开始进行ASP.NETCore开发时,我们需要首先关注其启动过程。WebApplication和WebApplicationBuilder类在启动过程中扮演着关键角色。与之前的Core版本不同,从NET6及以上版本开始,我们可以直接使用Program类进行引导启动。而WebApplication则在Run之前需要进行4步配置:主机配置、应用程序配置、服务注册和中间件设置。 2. 主机配置 2.1. 配置WebHost 在WebApplicationBuilder中,可以通过使用其只读属性Host来配置主机相关的设置。例如,我们可以通过调用Host.ConfigureHostConfiguration方法来配置主机配置,或者使用Host.ConfigureLogging方法来配置日志系统。 ```csharp var builder = WebApplicationBuilder.CreateDefault(args); ``` 2.2 创建实例 使用WebApplicationBuilder的CreateDefault方法可以创建一个WebApplicationBuilder实例。这个方法会默认加载一些常见的配置和服务,如环境变量、日志、配置系统等。 ```csharp var builder = WebApplicationBuilder.CreateDefault(args); ``` 2. 配置主机 在WebApplicationBuilder的Host属性中,我们可以使用IHostBuilder实例来配置主机相关设置。例如,我们可以通过调用Host.ConfigureHostConfiguration方法来配置主机配置,或者使用Host.ConfigureLogging方法来配置日志系统。 ```csharp builder.Host.ConfigureHostConfiguration(configHost => { // 配置主机配置 configHost.AddEnvironmentVariables("PREFIX_"); }); builder.Host.ConfigureLogging(logging => { // 配置日志系统 logging.AddConsole(); }); ``` 3. 配置应用程序 通过WebApplicationBuilder实例本身,我们可以配置应用程序的配置和服务。这包括配置和添加额外的配置源以及注册服务。 ```csharp // 配置 var configuration = builder.Configuration; // 添加额外的配置源 configuration.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); // 注册服务 builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); ``` 4. 构建WebApplication 完成所有必要的配置和服务注册后,我们可以使用Build方法来构建WebApplication实例。 ```csharp var app = builder.Build(); ``` 这个WebApplication实例包含了所有已配置的中间件、服务、路由等,并准备运行。 5. 配置中间件 在构建WebApplication实例之后,我们可以使用它来配置中间件。这通常包括错误处理、路由、认证、授权等。 ```csharp 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应用程序。

正文

 

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.配置应用程序

通过 WebApplicationBuilder 实例本身,可以配置应用程序的配置和服务。
· 配置:可以使用 builder.Configuration 来访问应用程序的配置系统,并添加额外的配置源。
·服务:使用 builder.Services 来访问服务容器,并注册服务。
// 添加额外的配置源 
    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相似的内容:

DoNet Core的启动过程-WebApplicationBuilder

1.前言 在NET6开始做ASP.NETCore的开发,我们首先要看的是启动过程,而WebApplication和WebApplicationBuilder 类是启动过程好不开的类,WebApplicationBuilder 来引导启动,这和前面Core的版本引导启动分为Program和Startu

如何让 WinDebug Preview 加载 Dotnet Core 的 SOS.dll 进行调试

一、前言 最近我在使用 WinDebug进行系统调试,也是在学习《Net高级调试》这本书。以前听过 WinDebug 调试器,但是没有使用过,由于最近想起来了,就好好的研究一下,学习一下。初次接触,还是走了不少弯路,踩了不少坑。关于 WinDebug 最新版的安装方法,可以在“微软商店”里面,直接查

在.NET Core,除了VB的LikeString,还有其它方法吗?(四种LikeString实现分享)

Like运算符很好用,特别是它所提供的其中*、?这两种通配符,在Windows文件系统和各类项目中运用非常广泛。 但Like运算符仅在VB中支持,在C#中,如何实现呢? 以下是关于LikeString的四种实现方式,其中第四种为Regex正则表达式实现,且在.NET Standard 2.0及以上平...

造轮子之ORM集成

Dotnet的ORM千千万,还是喜欢用EF CORE 前面一些基础完成的差不多了,接下来可以集成数据库了,官方出品的ORM还是比较香。所以接下来就是来集成EF CORE。 安装包 首先我们需要安装一下EF CORE的NUGET包,有如下几个: Microsoft.EntityFrameworkCor

ASP.NET Core设置URLs的几种方法,完美解决.NET 6项目局域网IP地址远程无法访问的问题

近期在dotnet项目中遇到这样的问题:.net6 运行以后无法通过局域网IP地址远程访问。后查阅官方文档。整理出解决问题的五种方式方法,通过新建一个新的WebApi项目演示如下: 说明 操作系统:Ubuntu 22.04.2 运行时:.NET 6 开发工具:Visual Studio 2202 新

在.NET 8 RC1 版本中 MAUI、ASP.NET Core 和 EF8 的新特性

从年初2 月份发布第一个预览版,经历7个预览版后,Microsoft 西雅图时间9月13日发布了 .NET 8 RC 1: https://devblogs.microsoft.com/dotnet/announcing-dotnet-8-rc1/[1], 这是该框架在 11 月初正式发布之前的两个

.NET周刊【9月第3期 2023-09-17】

国内文章 在.NET 8 RC1 版本中 MAUI、ASP.NET Core 和 EF8 的新特性 https://www.cnblogs.com/shanyou/p/17698428.html 从年初2 月份发布第一个预览版,经历7个预览版后,Microsoft 西雅图时间9月13日发布了 .NE

C#/.NET/.NET Core编程技巧练习集(学习,实践干货)

DotNet Exercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程常用语法、算法、技巧、中间件、类库练习集,配套详细的文章教程讲解,助你快速掌握C#/.NET/.NET Core各种编程常用语法、算法、技巧、中间件、类库等等。 GitHub开源地址:https:/

再谈http请求调用(Post与Get),项目研发的核心一环

支持.Net Core(2.0及以上)与.Net Framework(4.0及以上) 【目录】 前言 Post请求 Get请求 与其它工具的比较 1【前言】 http请求调用是开发中经常会用到的功能。 在内,调用自有项目的Web Api等形式接口时会用到;在外,调用一些第三方功能接口时,也会用到,因

如何使用单纯的`WebAssembly`

一般来说在.net core使用WebAssembly 都是Blazor ,但是Blazor渲染界面,.net core也提供单纯的WebAssembly这篇博客我将讲解如何使用单纯的WebAssembly 安装WebAssembly模板 dotnet new install Microsoft.N