ASP.NET Core 应用是在其 Main 方法中创建 Web 服务器的控制台应用:

Main 方法调用 WebHost.CreateDefaultBuilder,通过生成器模式来创建web主机.生成器提供定义 Web 服务器(例如,UseKestrel)和启动类 (UseStartup) 的方法。 在前面的例子中,自动分配了 Kestrel Web 服务器。ASP.NET Core 的 Web 主机尝试在 IIS 上运行(如果可用)。 对于其他 Web 服务器(如 HTTP.sys),可通过调用相应的扩展方法来使用。 在下一节对 UseStartup 进行了更深入的介绍。

IWebHostBuilder 是 WebHost.CreateDefaultBuilder 调用的返回类型,它提供了许多可选方法。 其中的一些方法包括用于在 HTTP.sys 中托管应用的 UseHttpSys ,以及用于指定根内容目录的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 对象,该对象托管应用并开始侦听 HTTP 请求。

WebHostBuilder 提供了许多可选方法,其中包括用于在 IIS 和 IIS Express 中进行托管的 UseIISIntegration,以及用于指定根内容目录的 UseContentRoot。 Build 和 Run 方法生成 IWebHost 对象,该对象托管应用并开始侦听HTTP 请求。

Startup 类用于定义请求处理管道和配置应用所需的任何服务

ConfigureServices 定义应用所使用的服务(如 ASP.NET Core MVC、Entity Framework Core 和标识)。 Configure定义在请求管道中调用的中间件。

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)
{
}
}
  • 内容:如 Razor Pages、MVC 视图和静态资源
  • Web根:包含公共资源、CSS 等静态资源、JavaScript 和图形文件。
  • 依赖关系注入服务:服务是应用中常用的组件。 可以通过依存关系注入 (DI) 来获取服务。 ASP.NET Core 包括默认支持构造函数注入的本机控制反转 (IoC) 容器。 可根据需要替换默认容器。 DI 除了具备松散耦合优势以外,还可以使服务(例如日志记录)在整个应用中可用。
  • 中间件:在 ASP.NET Core 中,使用中间件来撰写请求管道。 ASP.NET Core 中间件在 HttpContext 上执行异步操作,然后调用管道中的下一个中间件或终止请求。按照惯例,通过在 Configure 方法中调用 UseXYZ 扩展方法,向管道添加名为“XYZ”的中间件组件。ASP.NET Core 包含一组丰富的内置中间件,你也可以编写自己的自定义中间件。 ASP.NET Core 应用中支持 .NET的开放 Web 接口 (OWIN),它将 Web 应用与 Web 服务器分离。
  • HTTP启动请求:IHttpClientFactory 可访问 HttpClient 实例以发出 HTTP 请求。
  • 环境:环境(如“开发”环境和“生产”环境)是 ASP.NET Core 的高级概念,可使用环境变量、设置文件和命令行参数进行设置。
  • ASP.NET Core 应用可配置和启动一个主机,负责应用启动和生存期管理。
  • 服务器:ASP.NET Core 托管模型不直接侦听请求。 托管模型依赖 HTTP 服务器实现将请求转发到应用。 转发的请求被打包为一组可通过接口进行访问的功能对象。 ASP.NET Core 包含托管的跨平台 Web 服务器,名为 Kestrel。 Kestrel通常在生产 Web 服务器(如反向代理配置中的 IIS 或 Nginx)后台运行。
  • 配置:基于名称/值对使用配置模型,不再是system.Configuration和web.config。配置从一组有序的配置提供程序获取设置。 内置配置提供程序支持各种文件格式(XML、 JSON、INI)、环境变量和命令行参数。 也可以编写你自己的自定义配置提供程序。
  • 日志记录:ASP.NET Core 支持适用于各种日志记录提供程序的日志记录 API。 内置提供程序支持向一个或多个目标发送日志。 可使用第三方记录框架。
  • 错误处理:ASP.NET Core 的内置方案可处理应用中的错误,包括开发人员异常页、自定义错误页、静态状态代码页和启动异常处理。
  • 路由
  • 文件处理
  • 静态文件
  • 会话和应用状态:ASP.NET Core 提供几种可在用户浏览 web 应用时保留会话和应用状态的方法。
  • 请求功能:与HTTP请求和响应相关的Web服务器实现详细信息在接口中定义,服务器实现和中间件使用这些接口来创建和修改应用的托管管道。
  • 后台任务:后台任务作为托管服务实现。 托管服务是一个类,具有实现 IHostedService 接口的后台任务逻辑。
  • WebSockets:WebSocket 是一个协议,支持通过 TCP 连接建立持久的双向信道。 它可用于聊天、股票报价和游戏等应用,以及Web 应用中需要实时功能的任何位置。 ASP.NET Core 支持 Web 套接字方案。

 Statusup类配置服务和请求管道

Statusup类包括ConfigureServices方法以配置应用的服务.Configure方法以创建应用的请求处理管道

在 Startup 类中注入依赖关系的常见用途为注入:

  • IHostingEnvironment 以按环境配置服务。
  • IConfiguration 以读取配置。
  • ILoggerFactory 以在 Startup.ConfigureServices 中创建记录器。
 private readonly IHostingEnvironment _env;
private readonly IConfiguration _config;
private readonly ILoggerFactory _loggerFactory;
public Startup(IHostingEnvironment env, IConfiguration config,
ILoggerFactory loggerFactory)
{
_env = env;
_config = config;
_loggerFactory = loggerFactory;
}

ConfigureServices方法

  • Optional
  • 在 Configure 方法配置应用服务之前,由 Web 主机调用。
  • 其中按常规设置配置选项。


调用所有Add{Service}方法,然后调用所有services.Configure{Service}方法。

将服务添加到服务容器,使其应用和Config方法中可用,这些服务是通过依赖关系注入或IApplicationBuilder.ApplicationServices 解析。

Configure方法


configure方法用于指定应用响应HTTP请求的方式。可通过将中间件组件添加到IApplicationBuilder实例来配置请求管道。Configure 方法可使用 IApplicationBuilder ,但未在服务容器中注册。 托管创建IApplicationBuilder 并将其直接传递到 管道  。

使用Use扩展方法将中间件组件添加到请求管道,

使用Startup筛选器扩展Startup

在应用的 Configure 中间件管道的开头或末尾使用 IStartupFilter 来配置中间件。 IStartupFilter 有助于确保
中间件在应用请求处理管道的开始或结束时由库添加的中间件之前或之后运行

IStartupFilter 实现单个方法(即 Configure),该方法接收并返回 Action<IApplicationBuilder> 。
IApplicationBuilder 定义用于配置应用请求管道的类。 有关详细信息,请参阅使用 IApplicationBuilder 创建中
间件管道。
在请求管道中,每个 IStartupFilter 实现一个或多个中间件。 筛选器按照添加到服务容器的顺序调用。 筛选
器可在将控件传递给下一个筛选器之前或之后添加中间件,从而附加到应用管道的开头或末尾。

IStartupFilter 实现单个方法(即 Configure),该方法接收并返回 Action<IApplicationBuilder> 。
IApplicationBuilder 定义用于配置应用请求管道的类。

IStartupFilter 在 IWebHostBuilder.ConfigureServices 中的服务容器中注册

中间件执行顺序由 IStartupFilter 注册顺序设置:
多个 IStartupFilter 实现可能与相同的对象进行交互。 如果顺序很重要,请将它们的 IStartupFilter 服
务注册进行排序,以匹配其中间件应有的运行顺序。
库可能添加包含一个或多个 IStartupFilter 实现的中间件,这些实现在向 IStartupFilter 注册的其他应
用中间件之前或之后运行。 若要在库的 IStartupFilter 添加中间件之前调用 IStartupFilter 中间件,请
在将库添加到服务容器之前定位服务注册。 若要在此后调用,请在添加库之后定位服务注册。

.NET CORE应用程序启动的更多相关文章

  1. NET CORE 应用程序启动

    原文:Application Startup作者:Steve Smith翻译:刘怡(AlexLEWIS)校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程序提供 ...

  2. 如何在ASP.NET Core程序启动时运行异步任务(3)

    原文:Running async tasks on app startup in ASP.NET Core (Part 3) 作者:Andrew Lock 译者:Lamond Lu 之前我写了两篇有关 ...

  3. 如何在ASP.NET Core程序启动时运行异步任务(2)

    原文:Running async tasks on app startup in ASP.NET Core (Part 2) 作者:Andrew Lock 译者:Lamond Lu 在我的上一篇博客中 ...

  4. 如何在ASP.NET Core程序启动时运行异步任务(1)

    原文:Running async tasks on app startup in ASP.NET Core (Part 1) 作者:Andrew Lock 译者:Lamond Lu 背景 当我们做项目 ...

  5. ASP.NET Core 应用程序Startup类介绍

    Startup类配置服务和应用程序的请求管道. Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBui ...

  6. ASP.NET Core 应用程序Startup类介绍 (转载)

    Startup类配置服务和应用程序的请求管道. Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBui ...

  7. Net core学习系列(五)——Net Core应用程序Startup类介绍

    一.Startup 类 ASP.NET Core应用程序需要一个启动类,按照惯例命名为Startup.在主程序的Web Host生成器(WebHostBuilderExtensions)的 UseSt ...

  8. ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

    原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...

  9. 在 ASP.NET Core 程序启动前运行你的代码

    一.前言 在进行 Web 项目开发的过程中,可能会存在一些需要经常访问的静态数据,针对这种在程序运行过程中可能几乎不会发生变化的数据,我们可以尝试在程序运行前写入到缓存中,这样在系统后续使用时就可以直 ...

随机推荐

  1. Egret学习-TiledMap使用

    环境说明: 引擎版本:5.2.4 Egret Wing 4.1.6 1.下载依赖,下载地址https://github.com/egret-labs/egret-game-library/tree/m ...

  2. PSP第一次总结

    项目计划总结 周活动总结表 姓名:王金萱                                                                                 ...

  3. Linux 系统常用管理命令(精简笔记)

    Linux是一套免费使用和自由传播的类Unix操作系统,下面的笔记是我从鸟菜中摘抄出来的重要命令,并进行了一定的排版,摒弃了一些用不到的乱七八糟的命令,目的是在生产环境中能够快速的定位并查询需要命令的 ...

  4. Client API Object Model - Grid Context(3.3)

    Grids 网格,以表格的形式显示数据, 网格可以跨越整个form,也可以是form中的一项. 被称为子网格(subgrid). grid有两种, 一种是read-only grid, 另一种是edi ...

  5. CSS-05-伪类及伪元素选择器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. GC原理---垃圾收集算法

    垃圾收集算法 Mark-Sweep(标记-清除算法) 标记清除算法分为两个阶段,标记阶段和清除阶段.标记阶段任务是标记出所有需要回收的对象,清除阶段就是清除被标记对象的空间. 优缺点:实现简单,容易产 ...

  7. SpringCloud与微服务Ⅱ --- 微服务概述

    一.什么是微服务 1) Martin Fowler论文对微服务的阐述(中文版) 2) 对单一应用进行拆分 3) 每一个独立的应用都有一个独立的进程 4) 拥有自己独立的数据库 5) 微服务化的核心就是 ...

  8. React脚手架解决不能使用less问题

    引言 学编程,还是多敲代码呀,React脚手架不支持less,因此需要配置webpack的webpack.config.js文件 释放配置文件 我们在使用React脚手架的时候,发现发现是没有webp ...

  9. Java数据类型及对应取值范围

    Java数据类型及对应取值范围 在Java中,数据类型分为两大种:基本数据类型(值类型)和包装类型(引用数据类型).基本数据类型不是对象,不能调用toString().hashCode().getCl ...

  10. tmobst2an

    (单选题)与下面代码效果相同的HQL 语句是( ). Criteria criteria = session.createCriteria(User.class); criteria.add(Rest ...