ASP.NET Core - 各项配置

  之前搭建好了各项开发环境,现在来说说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.cs

  可以就看到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 }
project.json

  在这个文件中只要用于配置使用的基础架构是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请求配置

谢谢各位博友的耐心阅读,如有不对请指正

  

  

 

  

  

 

posted @ 2016-08-04 16:37  不敢出门  阅读(1208)  评论(0编辑  收藏  举报