ASP.NET Core 应用是一个控制台应用
它在 Program.cs
的Main
方法中创建 Web 服务器。
Main 方法整个应用的入口:
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
.NET Core 的宿主WebHost主要执行以下任务:
- 加载.NET Core runtime.
- 启动应用
Main方法通过生成器模式来调用WebHost.CreateDefaultBuilder来创建宿主主机环境。生成器提供定义 Web 服务器(例如,UseKestrel)和启动类 (UseStartup) 的方法。
在上面的例子中,默认分配了 Kestrel Web 服务器
IWebHostBuilder 是 调用WebHost.CreateDefaultBuilder
的返回类型,它提供了许多可选方法。 其中的一些方法包括用于在 HTTP.sys 中托管应用的 UseHttpSys
,以及用于指定根内容目录的 UseContentRoot,还有提供Build 和 Run 方法生成 IWebHost 对象,该对象启动后就开始托管应用并开始侦听 HTTP 请求。
Startup 类用于定义请求处理管道和配置注入应用所需的任何服务。 Startup 必须是公共类,并包含以下方法:
public class Startup
{
// This method gets called by the runtime. Use this method
// to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method
// to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app)
{
}
}
ConfigureServices 定义应用所使用的服务(所谓服务就是一类第三方类库)(如 ASP.NET Core MVC、Entity Framework Core 和标识)。Configure 定义在请求管道中调用的中间件。
总上所述:
- ASP.NET Core 是一个控制应用。
- ASP.NET Core 的启动入口是在
Program.cs
的Main
方法中。 - ASP.NET Core 启动会初始化一个宿主,该宿主用来托管应用。
- ASP.NET Core 因为是一个控制台应用,所以肯定是没有http能力的,于是内置了一个Web服务。
- ASP.NET Core 是一个大框架,该框架可以跨平台。
- ASP.NET Core 的启动就是初始化一个 IWebHost
对象。
接下来,我开始讲Startup相关,依然是启动过程。