zoukankan      html  css  js  c++  java
  • 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请求配置

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

      

      

      

      

  • 相关阅读:
    算法之路 level 01 problem set
    算法原理与实践(链表)
    散列表(HashTable)
    系统设计与实践(实战演练)
    桶排序 + 基数排序
    算法原理与实践(二叉树)
    Total Difference String
    【翻译】std::list::remove
    【翻译】std::remove
    Observer模式实践
  • 原文地址:https://www.cnblogs.com/JNLightGade/p/5735776.html
Copyright © 2011-2022 走看看