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

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之间的选择

本文来源:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/index?tabs=aspnetcore2x

本人英语水平有限,如有误导和错误的地方,还请大家指正和多多包涵。

ASP.NET Core原理概述的更多相关文章

  1. ASP.NET Core MVC 概述

    https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-2.2 ASP.NET Core MVC 概述 20 ...

  2. ASP.NET Core模块概述

    原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...

  3. asp.net core IdentityServer4 概述

    概览 现代应用程序看上去大都是这样的: 最常见的交互是: 浏览器与Web应用程序通信 Web应用程序与Web API通信(有时是独立的,有时是代表用户的) 基于浏览器的应用程序与Web API通信 本 ...

  4. ASP.NET Core DI概述

    众所周知,ASP.NET Core有一个DI框架,应用程序启动时初始化. 预定义依赖 1: IApplicationBuilder:提供了配置应用程序的请求管道机制 2:ILoggerFactory: ...

  5. ASP.NET Core 运行原理剖析

    1. ASP.NET Core 运行原理剖析 1.1. 概述 1.2. 文件配置 1.2.1. Starup文件配置 Configure ConfigureServices 1.2.2. appset ...

  6. .NET CORE学习笔记系列(5)——ASP.NET CORE的运行原理解析

    一.概述 在ASP.NET Core之前,ASP.NET Framework应用程序由IIS加载.Web应用程序的入口点由InetMgr.exe创建并调用托管,初始化过程中触发HttpApplicat ...

  7. [ASP.NET Core 3框架揭秘] 依赖注入[9]:实现概述

    <服务注册>.<服务消费>和<生命周期>主要从实现原理的角度对.NET Core的依赖注入框架进行了介绍,接下来更进一步,看看该框架的总体设计和实现.在过去的多个版 ...

  8. asp.net core 3.x 通用主机原理及使用

    一.前言 只是讲asp.net core 3.x通用主机的大致原理,这些东西是通过查看源码以及自己根据经验总结得来的,在文章中不会深入源码,因为个人觉得懂原理就晓得扩展点,后期碰到有需求的时候再仔细去 ...

  9. asp.net core 3.x 身份验证-3cookie身份验证原理

    概述 上两篇(asp.net core 3.x 身份验证-1涉及到的概念.asp.net core 3.x 身份验证-2启动阶段的配置)介绍了身份验证相关概念以及启动阶段的配置,本篇以cookie身份 ...

随机推荐

  1. Eclipse设置内存大小

    Eclipse设置内存大小 1.修改Eclipse的配置文件 (1)打开Eclipse目录 (2)以EditPlus打开eclipse.ini,修改"-Xms40m  -Xmx512m&qu ...

  2. 如何给filter添加自定义接口

    .在Cfilter类的定义中实现Interface接口的函数的定义: //-----------------------Interface methods----------------------- ...

  3. Django学习-14-分页功能实例

    首先创建一个制作page的工具类                     utils                         --page_make.py                    ...

  4. 几款实力很强的小工具,提高Windows使用效率

    如果你说我会用Windows,许多人会说,切,谁不会用Windows啊? 接下来说说我在Windows环境下,如何使用一些工具,提高效率.这些工具是我过去这些年雪藏的,今天放出来晒一晒. 当我要搜索文 ...

  5. 【BZOJ4869】相逢是问候(线段树,欧拉定理)

    [BZOJ4869]相逢是问候(线段树,欧拉定理) 题面 BZOJ 题解 根据欧拉定理递归计算(类似上帝与集合的正确用法) 所以我们可以用线段树维护区间最少的被更新的多少次 如果超过了\(\varph ...

  6. 【洛谷1032 】【CJOJ1711】【NOIP2002】字串变换

    ###题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换 ...

  7. linux字符集介绍及解决中文乱码实战

    字符集对应配置文件:/etc/sysconfig/i18n 先备份再修改: 备份:cp /etc/sysconfig/i18n /etc/sysconfig/i18n.oldboy.20150521 ...

  8. 比较工具diif-vimdiff-windows比较工具详解

    以文件形式比较: # diff <变动前的文件> <变动后的文件> 以表格形式比较: #vimdiff FILE_LEFT FILE_RIGHT 或 # vim -d FILE ...

  9. 24时区,GMT,UTC,DST,CST时间详解

    全球24个时区的划分      相较于两地时间表,可以显示世界各时区时间和地名的世界时区表(World Time),就显得精密与复杂多了,通常世界时区表的表盘上会标示着全球24个时区的城市名称,但究竟 ...

  10. eclipse 中启动Tomcat超时了错误

    修改E:\eclipse\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\servers.xml 将 start-ti ...