ASP.NET Core 是一个控制台应用程序,在其 main 方法中创建一个Web服务器,以下是program.cs中的代码:
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; namespace WebApplication5 { public class Program { public static void Main(string[] args) { BuildWebHost(args).Run(); } public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .Build(); } }
Main 方法调用 WebHost.CreateDefaultBuilder ,它遵循建造者模式来创建 web application host 。 builder 定义了Web服务器(例如UseKestrel)和启动类(UseStartup)方法。 在上述示例中,Kestrel Web服务器将自动分配。 ASP.NET Core‘s web host 将尝试在IIS上运行(如果可用)。 其他Web服务器(如HttpSys)可以通过调用合适的扩展方法来使用。 UseStartup 将在下一节进一步介绍。
IWebHostBuilder 是 WebHost.CreateDefaultBuilder 方法的返回值类型,提供了许多可选方法。 其中一些方法包括 UseHttpSys ,用于在HttpSys中托管应用程序,以及 UseContentRoot ,用于指定根内容目录。 Build 和 Run 方法用于构建 IWebHost 对象,该对象将承载应用程序并开始监听HTTP请求。
Startup
The Startup class is where you define the request handling pipeline and where any services needed by the application are configured. The Startup class must be public and contain the following methods:
WebHostBuilder 上的 UseStartup 方法指定了您的应用程序的启动类:
启动类是您定义请求处理管道和配置应用程序所需的任何服务的地方。 启动类必须是公有的,并包含以下方法:
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,Identity等)。Configure 定义请求管道中的中间件。
服务是用于应用程序中常见消费的组件。 服务通过依赖注入(DI)提供。 ASP.NET Core包括一个本地控制反转(IoC)容器(默认情况下支持构造函数注入)。 本地容器可以替换为您选择的容器。 除了松耦合外,DI还可在整个应用中提供服务。 例如,您的应用程序中可以使用日志记录。有关更多信息,请参阅依赖注入。
中间件
在ASP.NET Core中,您使用中间件编写请求管道。 ASP.NET Core中间件在HttpContext上执行异步逻辑,然后在依次调用下一个中间件或直接终止请求。 通过在Configure方法中调用UseXYZ扩展方法来添加一个名为“XYZ”的中间件组件。
ASP.NET Core配备了丰富的内置中间件:
- 静态文件
- 路由
- 认证
您可以使用任何基于OWIN的中间件与ASP.NET Core,也可以自定义中间件。有关更多信息,请参阅Middleware and Open Web Interface for .NET (OWIN).
服务器
ASP.NET Core 托管模型不直接监听请求; 相反,它依赖于HTTP服务器实现将请求转发到应用程序。 转发的请求被包装为一组您可以通过接口访问的功能对象。该应用程序将此集合组成一个HttpContext。 ASP.NET Core包括一个受管理的,跨平台Web服务器,称为Kestrel。就像iis 或 nginx 一样。有关详细信息,请参阅 Servers and Hosting。
Content root
content root 是应用程序使用的任何内容的基路径,例如视图,Razor Pages,和静态资源。默认情况下, content root 与托管应用程序的可执行文件的应用程序基路径相同。可以使用 WebHostBuilder 指定 content root 的位置。
Web root
应用程序的Web根目录是项目中包含公共静态资源(如CSS,JavaScript和图像文件)的目录。默认情况下,静态文件中间件只会从Web根目录及其子目录提供文件。请参阅working with static files获取更多信息。 Web根路径默认为 /wwwroot ,但您可以使用 WebHostBuilder 指定不同的位置。
Configuration
ASP.NET Core使用新的配置模型来处理简单的名值(name-value)对。新的配置模型不基于 System.Configuration 或 web.config ;相反,它从一组有序的配置提供者中抽取出来。内置配置提供程序支持各种文件格式(XML,JSON,INI)和环境变量,以实现基于环境的配置。您也可以编写自定义配置提供程序。有关详细信息,请参阅 Configuration。
Environments
环境,如“开发”和“生产”,是ASP.NET Core中的最好的理念,可以使用环境变量进行设置。有关详细信息,请参阅Working with Multiple Environments。
.NET Core vs. .NET Framework runtime
ASP.NET Core应用程序可以选择.NET Core或.NET Framework运行时。有关更多信息,请参阅.NET Core和.NET Framework之间的选择。