《ASP.NET Core技术内幕与项目实战》精简集-基础组件1.1:应用启动

本节内容为补充知识点,书中没有相关章节内容(零散分布)

 

一、从AspNetCore6开始,将Program和Startup类合并,直接在入口类中注册服务和设置中间件。同时,项目可以启动miniApi,直接在Program中创建WebAPI

 1 //创建Web服务器
 2 var builder = WebApplication.CreateBuilder(args);
 3 
 4 builder.Services.AddRazorPages();
 5 builder.Services.AddControllersWithViews();
 6 
 7 var app = builder.Build();
 8 if (!app.Environment.IsDevelopment())
 9 {
10     app.UseExceptionHandler("/Error"); 
11     app.UseHsts();
12 }
13 
14 app.UseHttpsRedirection(); 
15 app.UseStaticFiles(); 
16 app.UseAuthorization(); 
17 
18 app.MapGet("/", () => "Hello!"); 
19 
20 app.MapDefaultControllerRoute(); 
21 app.MapRazorPages(); 
22 app.Run();

 代码解读:

2行:调用WebApplication的CreateBuilder方法,完成一系列Web服务器的初始化配置和服务注册,并返回WebApplicationBuilder

4-5行:WebApplicationBuilder的Services属性是依赖注入的容器,注册两个框架提供的服务

7行:调用WebApplicationBuilder的Build方法,返回应用服务器app(已注册服务)

8-22行:设置HTTP请求管道的一系列中间件管道

补充说明:

①WebApplication的CreateBuilder方法,默认注册了一系列框架的基础服务,比如依赖注入、配置、日志等,所以我们可以直接注入IConfiguration、ILog<T>等服务

②HTTP请求的中间件,有先后顺序,中间件约定以Use开头

 

 

二、AspNetCore6中,仍然可以实现Startup类,从而分离出服务注册和中间件设置

 1 //Program.cs类
 2 public class Program
 3 {
 4     public static void Main(string[] args)
 5     {
 6         var builder = WebApplication.CreateBuilder(args);
 7         var startup = new Startup(builder.Configuration);
 8         startup.ConfigureServices(builder.Services);
 9 
10         var app = builder.Build();
11         startup.Configure(app, app.Environment);
12         app.Run();
13     }
14 }
15 
16 //Startup.cs类
17 public class Startup
18 {
19     public IConfiguration Configuration { get; }
20     public Startup(IConfiguration configuration)
21     {
22         Configuration = configuration;
23     }
24 
25     public void ConfigureServices(IServiceCollection services)
26     {
27         services.AddRazorPages();
28         ......
29     }
30 
31     public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
32     {
33         if (!env.IsDevelopment())
34         {
35             app.UseExceptionHandler("/Error");
36             app.UseHsts();
37         }
38         app.UseHttpsRedirection();
39         ......
40     }
41 }

代码解读:

2-14行:Program类使用传统Main方法,未使用顶级语句

6-8行:创建一个Startup对象,并传入配置对象IConfiguration。调用Startup对象的ConfigureServices方法,并传入容器对象,完成服务注册

10-12行:调用Startup对象的Configure方法,并传入已注册服务的应用服务器app,完成中间件的设置

17-41行:与传统的Startup类相似,在ConfigureServices方法中注册服务,在Configure方法中设置中间件

补充说明:

① WebApplication的CreateBuilder方法,返回WebApplicationBuilder对象,此对象的Configuration属性为配置对象,Services属性为容器对象

②WebApplication可以理解为最初空的Web服务器,WebApplicationBuilder可以理解为完成一系列初始化配置的Web服务器,app可以理解为完成服务注册的应用服务器

 

  

三、应用启动时,框架为我们启动了内置的跨平台服务器Kestrel。Kestrel可以作为服务器自托管,也可以托管在IIS中(限Windows平台),或者在客户端与Kestrel之间架设反向代理服务器(跨平台,推荐)。Kestrel与IIS、Nginx的关系如下:

 

 

特别说明:
1、本系列内容主要基于杨中科老师的书籍《ASP.NET Core技术内幕与项目实战》及配套的B站视频视频教程,同时会增加极少部分的小知识点
2、本系列教程主要目的是提炼知识点,追求快准狠,以求快速复习,如果说书籍学习的效率是视频的2倍,那么“简读系列”应该做到再快3-5倍

 

posted @ 2022-08-28 12:15  functionMC  阅读(971)  评论(0编辑  收藏  举报