ASP.NET Core原理概述
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原理概述的更多相关文章
- ASP.NET Core MVC 概述
https://docs.microsoft.com/zh-cn/aspnet/core/mvc/overview?view=aspnetcore-2.2 ASP.NET Core MVC 概述 20 ...
- ASP.NET Core模块概述
原文地址:ASP.NET Core Module overview By Tom Dykstra, Rick Strahl, and Chris Ross ASP.NET Core模块(ANCM)让你 ...
- asp.net core IdentityServer4 概述
概览 现代应用程序看上去大都是这样的: 最常见的交互是: 浏览器与Web应用程序通信 Web应用程序与Web API通信(有时是独立的,有时是代表用户的) 基于浏览器的应用程序与Web API通信 本 ...
- ASP.NET Core DI概述
众所周知,ASP.NET Core有一个DI框架,应用程序启动时初始化. 预定义依赖 1: IApplicationBuilder:提供了配置应用程序的请求管道机制 2:ILoggerFactory: ...
- ASP.NET Core 运行原理剖析
1. ASP.NET Core 运行原理剖析 1.1. 概述 1.2. 文件配置 1.2.1. Starup文件配置 Configure ConfigureServices 1.2.2. appset ...
- .NET CORE学习笔记系列(5)——ASP.NET CORE的运行原理解析
一.概述 在ASP.NET Core之前,ASP.NET Framework应用程序由IIS加载.Web应用程序的入口点由InetMgr.exe创建并调用托管,初始化过程中触发HttpApplicat ...
- [ASP.NET Core 3框架揭秘] 依赖注入[9]:实现概述
<服务注册>.<服务消费>和<生命周期>主要从实现原理的角度对.NET Core的依赖注入框架进行了介绍,接下来更进一步,看看该框架的总体设计和实现.在过去的多个版 ...
- asp.net core 3.x 通用主机原理及使用
一.前言 只是讲asp.net core 3.x通用主机的大致原理,这些东西是通过查看源码以及自己根据经验总结得来的,在文章中不会深入源码,因为个人觉得懂原理就晓得扩展点,后期碰到有需求的时候再仔细去 ...
- asp.net core 3.x 身份验证-3cookie身份验证原理
概述 上两篇(asp.net core 3.x 身份验证-1涉及到的概念.asp.net core 3.x 身份验证-2启动阶段的配置)介绍了身份验证相关概念以及启动阶段的配置,本篇以cookie身份 ...
随机推荐
- (七)java类和对象
一个类定义一个新的数据类型,也就是定义了一个逻辑框架,定义了它的成员之间的关系.可以通过这种类型来声明该类型的对象,通过new关键词来实例化对象,也就是为该类型的对象动态的分配物理内存空间,这个分配过 ...
- angular自定义过滤器操作实例
//模块名字var filters = angular.module("customFilter",[]);//过滤器名字filters.filter("uniqueCa ...
- 异常-----freemarker.core.InvalidReferenceException问题解决
案例一 1.1.错误描述 五月 28, 2014 9:56:48 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template ...
- JDBCTemplate简化JDBC的操作(二)
一.Spring对不同的持久化支持: Spring为各种支持的持久化技术,都提供了简单操作的模板和回调 ORM持久化技术 模板类 JDBC org.springframework.jdbc.core. ...
- Java的深拷贝和浅拷贝
关于Java的深拷贝和浅拷贝,简单来说就是创建一个和已知对象一模一样的对象.可能日常编码过程中用的不多,但是这是一个面试经常会问的问题,而且了解深拷贝和浅拷贝的原理,对于Java中的所谓值传递或者引用 ...
- c#多线程同步之EventWaitHandle再次使用
/// <summary> /// 文件传输器,用来获取全文文件,自动根据全文文件数量,开启一定数量的线程,采用生产者消费模式 /// </summary> public cl ...
- 【高斯消元】BZOJ3503 [Cqoi2014]和谐矩阵
3503: [Cqoi2014]和谐矩阵 Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1197 Solved: ...
- 初步谈谈 C# 多线程、异步编程与并发服务器
多线程与异步编程可以达到避免调用线程异步阻塞作用,但是两者还是有点不同. 多线程与异步编程的异同: 1.线程是cpu 调度资源和分配的基本单位,本质上是进程中的一段并发执行的代码. 2.线程编程的思维 ...
- Spark2.1.0官方文档
Spark 概述 Apache Spark是一个快速和通用的集群计算系统.它提供Java,scala,Python.R语言的APIs,以及支持一般执行图形的优化引擎. 它还支持一组丰富的高级工具,包括 ...
- Unity3D脚本的生命周期(执行顺序)
Unity脚本中有许多固定的函数 例如Start();Update(); 而这些函数都有固定的执行顺序 搞清楚这些函数的执行顺序 对于我们理清代码的逻辑就显得尤为重要 举个简单的例子 //脚本A pu ...