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. IOLI-crackme0x06-0x09 writeup

    前几天写了使用Radare2并用3中方法来解决crackme0x00, 然后紧接着第二天 就写了另外5个writeup, 如果认真看会发现那几个crackme的分析也是一开始 走了很多弯路, 但玩多了 ...

  2. 【BZOJ2748】音量调节(动态规划)

    [BZOJ2748]音量调节(动态规划) 题面 Description 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都要改变一次音量.在演出开始之前,他已经 ...

  3. app图标icon大全

    http://tool.58pic.com/tubiaobao/index.php?m=Index&a=ui&p=2 很有用,下载没用,直接右键吧.

  4. 关系型数据库工作原理-查询优化器之数据访问方式(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  5. nginx学习之rewrite

    rewrite 语法学习 什么是rewrite nginx的rewrite主要功是实现URL地址重写.nginx的rewrite规则需要PCRE的支持,既可以通过Perl兼容正则表达式进行规则匹配.n ...

  6. 让wordpress标签云显示文章数的正确方法

    先看一下效果 在百度经验找到一个教程,可惜,根据实践发现方法是错误的, 百度经验上的代码: 1 2 3 4 5 6 7 8 9 10 11 12 //标签tag所包含的文章数量 function Ta ...

  7. Docker国内镜像源设置

    编辑json文件,添加如下内容后重启docker即可. [root@Docker ~]# cat /etc/docker/daemon.json{ "registry-mirrors&quo ...

  8. NGINX压力测试

    目录 1    硬件配置    3 1.1    型号    3 1.2    CPU    3 1.3    内存    3 2    软件环境    3 2.1    操作系统    3 2.2  ...

  9. 原生拖拽js利用localstorage保存位置

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. [译]Android view 测量布局和绘制的流程

    原文链接 创造优秀的用户体验是我们开发者的主要目标之一.为此, 我们首先要了解系统是如何工作的, 这样我们才可以更好的与系统配合, 从它的优点中获益, 规避它的缺陷. 之前关于Android渲染过程的 ...