之前搭建好了各项开发环境,现在来说说ASP.NET Core的各项配置、项目结构、以及在请求管道中挂载的各式各样的中间件。今天先来探讨探讨其各项配置及其项目结构
ASP.NET Core和上一代Framework4.5中的ASP.NET MVC5(或者WebForm)在应用启动环节上有很大的不同,要探讨ASP.NET Core的启动方式需要先了解一下它的基础框架 .NET Core。
我先来看看,最初的.NET Core的应用结构,如下:
我们抛开VSCode可以简单的发现有只要两个必须的文件,一个就是应用启动的入口Program.cs文件,一个就是环境和依赖配置的project.json文件。
现在我们来看看这两个文件的内容:
using System; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
可以就看到program只有一个main方法,看到这个相信大家不难理解程序的入口为何在这里,为啥要用Program来做入口呢,之后我们在说道说道。
1 { 2 "version": "1.0.0-*", 3 "buildOptions": { 4 "debugType": "portable", 5 "emitEntryPoint": true 6 }, 7 "dependencies": {}, 8 "frameworks": { 9 "netcoreapp1.0": { 10 "dependencies": { 11 "Microsoft.NETCore.App": { 12 "type": "platform", 13 "version": "1.0.0" 14 } 15 }, 16 "imports": "dnxcore50" 17 } 18 } 19 }
在这个文件中只要用于配置使用的基础架构是Core还是framework,依赖项,程序版本说明,兼容性说明等等应用的基础配置项,这些配置项之后会一一道来,在这里可以简单先知道dependencies 这项配置适用于配置应用需要的依赖插件包的。
可以简单的理解为 ASP.NET Core 是由 .NET Core加几项配置和依赖项组成的,具体教程可以参看ASP.NET 中文文档。接下来我们直接看使用yeoman生成的asp.net Core的空应用结构:
至于Dockerfile 属于Docker范畴 后面再来另起文章来讲解, 博友也可以移步此处了解。
现在我们看看project.json内几个种重要依赖包:
1.运行服务的载体,ASP.NET Core支持3种服务载体:
a. Microsoft.AspNetCore.Server.IISIntegration,就是大家熟知的IIS
b. Microsoft.AspNetCore.Server.Kestrel ,跨平台
c. Microsoft.AspNetCore.Server.WebListener,只能在windows 上使用,还是预览版
通常我们会使用a和b两种,至于原因我们在后说Server的时候给大家说说。
2. 日志输出 Microsoft.Extensions.Logging.Console
3. 平台的基础框架包 Microsoft.NETCore.App
4. 异常中间件 Microsoft.AspNetCore.Diagnostics (包括很多异常显示,欢迎页面等等)
当然重要包还有很多,我们会在完后慢慢一一给道来。
再来看看生成出来的program.cs和Startup.cs
/// <summary> /// 应用入口类 /// </summary> public class Program { public static void Main(string[] args) { //配置类 var config = new ConfigurationBuilder() .AddCommandLine(args) .AddEnvironmentVariables(prefix: "ASPNETCORE_")//运行的环境变量 .Build(); //web宿主 var host = new WebHostBuilder() .UseConfiguration(config) //引入配置 .UseKestrel() //使用Kestrel部署 .UseUrls("http://*:6000") //修改Kestrel绑定的地址 .UseContentRoot(Directory.GetCurrentDirectory())//引用根目录 .UseIISIntegration() //引入IIS组件包 .UseStartup<Startup>()//启动配置文件 .Build(); //运行web宿主 host.Run(); } }
/// <summary> /// web宿主的入口类 /// </summary> public class Startup { //加入服务项到容器种, 这个方法将会被runtime调用 public void ConfigureServices(IServiceCollection services) { } /// <summary> /// 配置HTTP请求管道 /// </summary> /// <param name="app">被用于构建应用程序的请求管道。只可以在 Startup 中的 Configure 方法里使用</param> /// <param name="env">提供了访问应用程序属性,如环境变量</param> /// <param name="loggerFactory">提供了创建日志的机制</param> public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) { loggerFactory.AddConsole(); if (env.IsDevelopment()) //根据配置的环境为开发环境,则会配置抛出异常错误界面 { app.UseDeveloperExceptionPage(); //抛出详细的异常错误界面 } //管道断路 app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); } }
我们大概看了一下生成出的每一个文件的含义,包括ASP.NET Core的配置和启动顺序和方式,接下来我们将会了解中间件和管道配置等重要的HTTP请求配置
谢谢各位博友的耐心阅读,如有不对请指正