《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倍