科技>计算机>网络与互联网
ASP.NETCore3框架揭秘(上下册)

ASP.NETCore3框架揭秘(上下册)"

作者:蒋金楠
ISBN:9787121384622
定价:¥199.0
字数:1517千字
页数:916
出版时间:2020-03
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书主要阐述 ASP.NET Core 最核心的部分——请求处理管道。通过阅读本书,读者可以深刻系统地了解 ASP.NET Core 应用在启动过程中管道的构建方式,以及请求在管道中的处理流程。本书还详细讲述了 .NET Core 跨平台的本质,以及多个常用的基础框架(如依赖注入、文件信息、配置选项和诊断日志等)。本书还对大部分原生的中间件提供了系统性介绍,采用“编程体验”、“总体设计”、“具体实现”和“灵活运用”的流程,使读者可以循序渐进地学习 ASP.NET Core 的每个功能模块。本书可供所有 .NET 从业人员阅读与参考。

前言

写作源起 计算机图书市场存在一系列介绍 ASP.NET Web Forms、ASP.NET MVC、ASP.NET Web API 的图书,但是找不到一本专门介绍 ASP.NET 自身框架的图书,作为一名拥有 17 年工作经验的 .NET 开发者,笔者对此感到十分困惑。上述这些 Web 开发框架都是建立在 ASP.NET 底层框架之上的,底层 ASP.NET 框架才是根基所在。过去笔者接触过很多资深的 ASP.NET 开发人员,发现他们对 ASP.NET 框架大都没有进行深入了解。 2014 年,出版《ASP.NET MVC 5 框架揭秘》之后,笔者原本打算写“ASP.NET 框架揭秘”。但在新书准备过程中,微软推出了 ASP.NET Core(当时被称为 ASP.NET 5,还没有 .NET Core 的概念)。所以,笔者将研究重点转移到 ASP.NET Core。 本书耗时 5 年左右,笔者投入了大量心血。2015 年年初,笔者开始了本书的写作,微软在2016 年 6 月正式发布 .NET Core 1.0 时,本书的绝大部分内容就已经完成。随后,微软不断推出新的版本,本书的内容也在不断快速“迭代”中。本书正文部分共计 800 多页,但笔者在写作过程中删除的部分不少于这个数字。 有人认为自己每天只是做一些简单的编程工作,根本没有必要去了解底层原理和设计方面的内容。其实,不论我们从事何种层次的工作,最根本的目的只有一个——解决问题。解决方案分两种:一种是“扬汤止沸”,另一种是“釜底抽薪”。看到锅里不断沸腾的水,大多数人会选择不断地往锅里浇冷水,笔者希望这本书能够使读者看到锅底熊熊燃烧的薪火。 【本书内容】 ASP.NET Core 是一个全新的 Web 开发平台,为我们构建了一个可复用和可定制的请求处理管道,微软在它上面构建了 MVC、SignalR、GRPC、Orleans 这样广泛使用的 Web 框架,我们也可以利用它构建自己的 Web 框架(笔者曾经通过 ASP.NET Core 构建了一款 GraphQL 框架)。本书只关注最本质的东西,即 ASP.NET Core 请求处理管道,并不会涉及上述这些 Web 框架。本书的内容主要划分为如下 4 个部分。 1.跨平台的开发体现和实现原理 .NET Core 与传统 .NET Framework 最大的区别是跨平台,作为开篇入门材料,第 1 章通过几个简单的 Hello World 程序,让读者可以体验如何在 Windows、macOS、Linux 平台上开发 .NET Core 应用,以及通过 Docker 容器部署 ASP.NET Core 应用的乐趣。第 2 章将告诉读者 .NET Core 的跨平台究竟是如何实现的。 2.基础框架 ASP.NET Core 框架依赖于一些基础框架,其中最重要的是注入框架。由于依赖注入框架不但是构建 ASP.NET Core 请求处理管道的基石,而且依赖注入也是 ASP.NET Core 应用的基本编程模式,所以本书的第 3 章和第 4 章对依赖注入原理及依赖注入框架的设计与编程方式进行了详细介绍。 ASP.NET Core 应用具有很多读取文件内容的场景,所以它构建了一个抽象的文件系统,第 5 章会对这个文件系统的设计模型和两种实现方式(物理文件系统和程序集内嵌文件系统)进行详细介绍。 .NET Core 针对“配置”的支持是传统 .NET 开发人员所不能想象的,所以采用两章的篇幅对这一主题进行讲解:第 6 章旨在介绍支持多种数据源的配置系统;不论是开发 ASP.NET Core应用还是组件,都可以采用 Options 模式来读取配置选项,第 7 章会着重讲述这种强类型的配置选项编程方式。 .NET Core 在错误诊断方面为我们提供了多种选择,第 8 章介绍了 5 种常用的记录诊断日志的方式。 .NET Core 还提供了一个支持多种输出渠道的日志系统,该日志系统在第 9 章进行了详细的介绍。 3.管道详解 .NET Core 的服务承载系统用来承载那些需要长时间运行的服务,ASP.NET Core 作为最重要的服务类型被承载于该系统中,第 10 章会对该服务承载系统进行系统介绍。由于请求处理管道是本书的核心所在,所以采用 3 章的篇幅进行介绍:第 11 章主要从编程模型的角度来认识管道;第 12 章提供了一个极简版的模拟框架来展示 ASP.NET Core 框架的总体设计;第 13 章以这个模拟框架为基础,采用渐进的方式补充一些遗漏的细节,进而将 ASP.NET Core 框架真实的管道展现在读者眼前。 4.中间件 ASP.NET Core 框架的请求处理管道由服务器和中间件组成,管道利用服务器来监听和接收请求,并完成最终对请求的响应,应用针对请求的处理则体现在有序排列的中间件上。微软为我们提供了一系列原生的中间件,对这些中间件的介绍全部在下册。 这部分涉及用来处理文件请求(第 14 章)、路由(第 15 章)、异常(第 16 章)的中间件,也包括用来响应缓存(第 17 章)和会话(第 18 章)的中间件,还包括用来实现认证(第 19 章)、授权(第 20 章)、跨域资源共享(第 21 章)等与安全相关的中间件。 这部分还介绍了针对本地化(第 22 章)和健康检查(第 23 章)的中间件。除此之外,这部分还介绍了用来实现主机名过滤、HTTP 重写、设置基础路径等功能的中间件,这些零散的中间件全部在第 24 章进行介绍。 【写作特点】 本书是揭秘系列的第 6 本书。在过去的十来年里,笔者得到了很多热心读者的反馈,这些反馈对书中的内容基本上都持正面评价,但对写作技巧和表达方式的评价则不尽相同。每个作者都有属于自己的写作风格,每个读者的学习思维方式也不尽相同,两者很难出现百分之百的契合,但笔者还是决定在本书上做出改变。 本书内容采用了不一样的组织方式,笔者认为这样的方式更符合系统地学习一门全新技术的“流程”。对于每个模块,笔者采用“体验先行”的原则,提供一些简单的实例演示,使读者对当前模块的基本功能特性和编程模式具有大致的了解。同时,在编程体验中抽取一些核心对象,并利用它们构建当前模块的抽象模型,使读者只要读懂了这个模型也就了解了当前模块的总体设计。接下来我们从抽象转向具体,进一步深入介绍抽象模型的实现原理。为了使读者能够在真实项目中灵活自如地运用当前模块,笔者介绍了一些面向应用的扩展和最佳实践。总体来说,本书 采用“编程体验”、“总体设计”、“具体实现”和“灵活运用”的流程,使读者能循序渐进地学习ASP.NET Core 的每个功能模块。 本书综合运用 3 种不同的“语言”(文字语言、图表语言和编程语言)来讲述每个技术主题。 一图胜千言,笔者在每章都精心设计了很多图表,这些具象的图表能够帮助读者理解技术模块的总体设计、执行流程和交互方式。除了利用编程语言描述应用编程接口(API),本书还提供了近200 个实例,这些实例具有不同的作用,有的是为了演示某个实用的编程技巧或者最佳实践,有的是为了强调一些容易忽视但很重要的技术细节,有的是为了探测和证明所述的论点。 本书在很多地方会展示一些类型的代码,但是这些代码和真正的源代码是有差异的,两者的差异缘于以下几个原因:第一,源代码在版本更替中一直在发生改变;第二,由于篇幅的限制,笔者刻意删除了一些细枝末节的代码,如针对参数的验证、诊断日志的输出和异常处理等;第三,很多源代码其实都具有优化的空间。综上所述,本书提供的代码片段旨在揭示设计原理和实现逻辑,不是为了向读者展示源代码。 【目标读者】 虽然本书关注的是 ASP.NET Core 自身框架提供的请求处理管道,而不是具体某个应用编程框架(如 MVC、SignalR、GRPC 等),但是本书适合所有 .NET 技术从业人员阅读。 笔者认为任何好的设计都应该是简单的,唯有简单的设计才能应对后续版本更替中出现的复杂问题。从这个意义上讲,ASP.NET 框架就是好的设计。因为自正式推出的那一刻起,ASP.NET 框架的总体设计基本上没有发生改变。ASP.NET Core 的设计同样是好的设计,其简单的管道式设计在未来的版本更替中也不会发生太大的改变,既然是好的设计,它就应该是简单的。 正如上面所说,本书采用渐进式的写作方式,那些完全没有接触过 ASP.NET Core 的开发人员也可以通过本书深入、系统地掌握这门技术。由于本书提供的大部分内容都是独一无二的,即使是资深的 .NET 开发设计人员,也能在书中找到很多不甚了解的盲点。 【关于作者】 蒋金楠,同程艺龙技术专家。知名 IT 博主(多年来一直排名博客园第一位),拥有个人微信公众号“大内老 A”;2007—2018 年连续 12 次被评为微软 MVP(最有价值专家),也是少数跨多领域(Solutions Architect、Connected System、Microsoft Integration 和 ASP.NET/IIS 等)的 MVP 之一;畅销 IT 图书作者,先后出版了《WCF 全面解析》、《ASP.NET MVC 4 框架揭秘》、《ASP.NETMVC 5 框架揭秘》和《ASP.NET Web API 2 框架揭秘》等著作。 【致谢】 本书得以顺利出版离不开博文视点张春雨团队的辛勤努力,他们的专业水准和责任心为本书提供了质量保证。此外,徐妍妍在本书写作过程中做了大量的校对工作,在此表示衷心感谢。 【本书支持】 由于本书是随着 ASP.NET Core 一起成长起来的,并且随着 ASP.NET Core 的版本更替进行了多次“迭代”,所以书中某些内容最初是根据旧版本编写的,新版本对应的内容发生改变后相应内容可能没有及时更新。对于 ASP.NET Core 的每次版本升级,笔者基本上会尽可能将书中的内容做相应的更改,但其中难免有所疏漏。由于笔者的能力和时间有限,书中难免存在不足之处,恳请广大读者批评指正。

目录

第 1 章 全新的开发体验 ..................................................................................................................... 1 1.1 Windows 平台 .......................................................................................................................... 1 1.1.1 构建开发环境 ............................................................................................................. 1 1.1.2 利用命令行创建 .NET Core 应用 ............................................................................. 2 1.1.3 ASP.NET Core 应用 .................................................................................................... 6 1.1.4 ASP.NET Core MVC 应用 ........................................................................................ 13 1.2 macOS 用户 ............................................................................................................................ 17 1.2.1 构建开发环境 ........................................................................................................... 17 1.2.2 利用命令行创建 .NET Core 应用 ........................................................................... 17 1.2.3 ASP.NET Core MVC 应用 ........................................................................................ 18 1.3 Linux ....................................................................................................................................... 19 1.3.1 启用 Linux 子系统 .................................................................................................... 20 1.3.2 构建开发环境 ........................................................................................................... 22 1.3.3 利用命令行创建 ASP.NET Core 应用 ..................................................................... 22 1.4 Docker .................................................................................................................................... 24 第 2 章 跨平台的奥秘 ....................................................................................................................... 27 2.1 历史的枷锁 ............................................................................................................................ 27 2.1.1 Windows 下的 .NET ................................................................................................. 27 2.1.2 非 Windows 下的 .NET ............................................................................................ 31 2.2 复用之伤 ................................................................................................................................ 34 2.2.1 源代码复用 ............................................................................................................... 34 2.2.2 程序集复用 ............................................................................................................... 36 2.3 全新的布局 ............................................................................................................................. 44 2.3.1 跨平台的 .NET Core ................................................................................................ 44 2.3.2 统一的 BCL ............................................................................................................... 51 2.3.3 展望未来 .................................................................................................................... 56 第 3 章 依赖注入(上篇) ............................................................................................................... 58 3.1 控制反转................................................................................................................................. 58 3.1.1 流程控制的反转 ........................................................................................................ 58 3.1.2 好莱坞法则 ................................................................................................................ 61 3.1.3 流程定制 .................................................................................................................... 62 3.2 IoC 模式.................................................................................................................................. 62 3.2.1 模板方法 .................................................................................................................... 63 3.2.2 工厂方法 .................................................................................................................... 64 3.2.3 抽象工厂 .................................................................................................................... 66 3.3 依赖注入................................................................................................................................. 68 3.3.1 由容器提供对象 ........................................................................................................ 68 3.3.2 3 种依赖注入方式 ..................................................................................................... 69 3.3.3 Service Locator 模式 ................................................................................................. 72 3.4 一个简易版的依赖注入容器 ................................................................................................. 74 3.4.1 编程体验 .................................................................................................................... 74 3.4.2 设计与实现 ................................................................................................................ 79 3.4.3 扩展方法 .................................................................................................................... 85 第 4 章 依赖注入(下篇) ............................................................................................................... 89 4.1 利用容器提供服务 ................................................................................................................. 89 4.1.1 服务的注册与消费 .................................................................................................... 89 4.1.2 生命周期 .................................................................................................................... 93 4.1.3 针对服务注册的验证 ................................................................................................ 96 4.2 服务注册................................................................................................................................. 99 4.2.1 ServiceDescriptor ....................................................................................................... 99 4.2.2 IServiceCollection .................................................................................................... 101 4.3 服务的消费 ........................................................................................................................... 105 4.3.1 IServiceProvider ....................................................................................................... 105 4.3.2 服务实例的创建 ...................................................................................................... 106 4.3.3 生命周期 .................................................................................................................. 109 4.4 实现概览 .............................................................................................................................. 113 4.4.1 ServiceProviderEngine 和 ServiceProviderEngineScope ........................................ 113 4.4.2 ServiceProvider ........................................................................................................ 115 4.4.3 注入 IServiceProvider 对象 ..................................................................................... 117 4.5 扩展 ...................................................................................................................................... 119 4.5.1 适配 ......................................................................................................................... 120 4.5.2 IServiceProviderFactory<TContainerBuilder> ........................................................ 120 4.5.3 整合第三方依赖注入框架 ...................................................................................... 121 第 5 章 文件系统 ............................................................................................................................. 126 5.1 抽象的文件系统 .................................................................................................................. 126 5.1.1 树形层次结构 ......................................................................................................... 126 5.1.2 读取文件内容 ......................................................................................................... 128 5.1.3 监控文件的变化 ..................................................................................................... 130 5.2 设计详解 .............................................................................................................................. 131 5.2.1 IChangeToken .......................................................................................................... 132 5.2.2 IFileProvider ............................................................................................................ 133 5.2.3 PhysicalFileProvider ................................................................................................ 135 5.2.4 EmbeddedFileProvider ............................................................................................ 139 5.2.5 两个特殊的 IFileProvider 实现 .............................................................................. 144 5.3 远程文件系统 ...................................................................................................................... 147 5.3.1 HttpFileInfo 与 HttpDirectoryContents ................................................................... 147 5.3.2 HttpFileProvider ...................................................................................................... 150 5.3.3 FileProviderMiddleware .......................................................................................... 151 5.3.4 远程文件系统的应用 .............................................................................................. 153 第 6 章 配置选项(上篇) ............................................................................................................ 155 6.1 读取配置信息 ...................................................................................................................... 155 6.1.1 配置编程模型三要素 .............................................................................................. 155 6.1.2 以键值对的形式读取配置 ...................................................................................... 156 6.1.3 读取结构化的配置 .................................................................................................. 157 6.1.4 将结构化配置直接绑定为对象 .............................................................................. 160 6.1.5 将配置定义在文件中 .............................................................................................. 161 6.2 配置模型 .............................................................................................................................. 165 6.2.1 数据结构及其转换 .................................................................................................. 166 6.2.2 IConfiguration .......................................................................................................... 167 6.2.3 IConfigurationProvider ............................................................................................ 169 6.2.4 IConfigurationSource ............................................................................................... 171 6.2.5 IConfigurationBuilder .............................................................................................. 171 6.3 配置绑定............................................................................................................................... 172 6.3.1 绑定配置项的值 ...................................................................................................... 173 6.3.2 绑定复合数据类型 .................................................................................................. 175 6.3.3 绑定集合对象 .......................................................................................................... 177 6.3.4 绑定字典 .................................................................................................................. 180 6.4 配置的同步 ........................................................................................................................... 181 6.4.1 配置数据流 .............................................................................................................. 181 6.4.2 ConfigurationReloadToken ...................................................................................... 182 6.4.3 ConfigurationRoot .................................................................................................... 183 6.4.4 ConfigurationSection ............................................................................................... 185 6.5 多样性的配置源 ................................................................................................................... 186 6.5.1 MemoryConfigurationSource ................................................................................... 187 6.5.2 EnvironmentVariablesConfigurationSource ............................................................. 188 6.5.3 CommandLineConfigurationSource ........................................................................ 191 6.5.4 FileConfigurationSource .......................................................................................... 194 6.5.5 StreamConfigurationSource ..................................................................................... 207 6.5.6 ChainedConfigurationSource ................................................................................... 208 6.5.7 自定义 ConfigurationSource(S616) ................................................................... 210 第 7 章 配置选项(下篇) ............................................................................................................. 215 7.1 Options 模式 ......................................................................................................................... 215 7.1.1 将配置绑定为 Options 对象 ................................................................................... 215 7.1.2 提供具名的 Options ................................................................................................ 217 7.1.3 配置源的同步 .......................................................................................................... 219 7.1.4 直接初始化 Options 对象 ....................................................................................... 221 7.1.5 根据依赖服务的 Options 设置 ............................................................................... 223 7.1.6 验证 Options 的有效性 ........................................................................................... 225 7.2 Options 模型 ......................................................................................................................... 226 7.2.1 OptionsManager<TOptions> ................................................................................... 226 7.2.2 IOptionsFactory<TOptions> .................................................................................... 228 7.2.3 IOptionsMonitorCache<TOptions> ......................................................................... 237 7.2.4 IOptionsMonitor<TOptions> ................................................................................... 238 7.3 依赖注入 .............................................................................................................................. 240 7.3.1 服务注册 ................................................................................................................. 240 7.3.2 IOptions<TOptions>与 IOptionsSnapshot<TOptions> ........................................... 246 7.3.3 扩展与定制 ............................................................................................................. 248 7.3.4 集成配置系统 ......................................................................................................... 256 第 8 章 诊断日志(上篇) ............................................................................................................ 258 8.1 各种诊断日志形式 .............................................................................................................. 258 8.1.1 调试日志 ................................................................................................................. 258 8.1.2 跟踪日志 ................................................................................................................. 259 8.1.3 事件日志 ................................................................................................................. 262 8.1.4 诊断日志 ................................................................................................................. 265 8.2 Debugger 调试日志 .............................................................................................................. 268 8.2.1 Debugger .................................................................................................................. 268 8.2.2 Debug ....................................................................................................................... 270 8.3 TraceSource 跟踪日志 ......................................................................................................... 271 8.3.1 跟踪日志模型三要素 .............................................................................................. 271 8.3.2 预定义 TraceListener............................................................................................... 280 8.3.3 Trace ........................................................................................................................ 284 8.4 EventSource 事件日志 ......................................................................................................... 287 8.4.1 EventSource ............................................................................................................. 287 8.4.2 EventListener ........................................................................................................... 294 8.4.3 荷载对象序列化 ..................................................................................................... 298 8.4.4 活动跟踪 ................................................................................................................. 302 8.4.5 性能计数 ................................................................................................................. 306 8.5 DiagnosticSource 诊断日志 ................................................................................................. 308 8.5.1 标准的观察者模式 .................................................................................................. 308 8.5.2 AnonymousObserver<T> ........................................................................................ 310 8.5.3 强类型的事件订阅 .................................................................................................. 313 8.5.4 针对活动的跟踪 ..................................................................................................... 315 第 9 章 诊断日志(下篇) ............................................................................................................ 317 9.1 统一日志编程模式 .............................................................................................................. 317 9.1.1 将日志输出到不同的渠道 ...................................................................................... 317 9.1.2 日志过滤 .................................................................................................................. 323 9.1.3 日志范围 .................................................................................................................. 329 9.1.4 LoggerMessage ........................................................................................................ 331 9.2 日志模型详解 ....................................................................................................................... 334 9.2.1 日志模型三要素 ...................................................................................................... 334 9.2.2 ILogger ..................................................................................................................... 335 9.2.3 日志范围 .................................................................................................................. 339 9.2.4 ILoggerProvider ....................................................................................................... 342 9.2.5 ILoggerFactory ......................................................................................................... 342 9.2.6 LoggerMessage ........................................................................................................ 347 9.3 依赖注入............................................................................................................................... 348 9.3.1 服务注册 .................................................................................................................. 349 9.3.2 设置日志过滤规则 .................................................................................................. 351 9.4 日志输出渠道 ....................................................................................................................... 353 9.4.1 控制台 ...................................................................................................................... 353 9.4.2 调试器 ...................................................................................................................... 357 9.4.3 TraceSource 日志 ..................................................................................................... 359 9.4.4 EventSource 日志 .................................................................................................... 362 第 10 章 承载系统 ........................................................................................................................... 377 10.1 服务承载 ............................................................................................................................. 377 10.1.1 承载长时间运行服务 ............................................................................................ 377 10.1.2 依赖注入 ................................................................................................................ 379 10.1.3 配置选项 ................................................................................................................ 382 10.1.4 承载环境 ................................................................................................................ 385 10.1.5 日志 ........................................................................................................................ 388 10.2 承载模型 ............................................................................................................................. 391 10.2.1 IHostedService ....................................................................................................... 392 10.2.2 IHost ....................................................................................................................... 392 10.2.3 IHostBuilder ........................................................................................................... 397 10.3 实现原理 ............................................................................................................................. 402 10.3.1 服务宿主 ................................................................................................................ 403 10.3.2 针对配置系统的设置 ............................................................................................ 406 10.3.3 针对依赖注入框架的设置 .................................................................................... 407 10.3.4 创建宿主 ............................................................................................................... 412 10.3.5 静态类型 Host ....................................................................................................... 418 第 11 章 管道(上篇) ................................................................................................................... 421 11.1 管道式的请求处理 ............................................................................................................. 421 11.1.1 两个承载体系 ........................................................................................................ 421 11.1.2 请求处理管道 ........................................................................................................ 423 11.1.3 中间件 .................................................................................................................... 424 11.1.4 定义强类型中间件 ................................................................................................ 427 11.1.5 按照约定定义中间件 ............................................................................................ 428 11.2 依赖注入 ............................................................................................................................ 430 11.2.1 服务注册 ................................................................................................................ 430 11.2.2 服务的消费 ............................................................................................................ 433 11.2.3 生命周期 ................................................................................................................ 437 11.2.4 集成第三方依赖注入框架 .................................................................................... 443 11.3 配置 .................................................................................................................................... 444 11.3.1 初始化配置 ............................................................................................................ 444 11.3.2 以键值对形式读取和修改配置 ............................................................................ 446 11.3.3 合并配置 ................................................................................................................ 448 11.3.4 注册 IConfigurationSource .................................................................................... 449 11.4 承载环境 ............................................................................................................................ 450 11.4.1 IWebHostEnvironment ........................................................................................... 450 11.4.2 通过配置定制承载环境 ........................................................................................ 452 11.4.3 针对环境的编程 .................................................................................................... 454 11.5 初始化 ................................................................................................................................ 459 11.5.1 Startup .................................................................................................................... 459 11.5.2 IHostingStartup ...................................................................................................... 461 11.5.3 IStartupFilter .......................................................................................................... 464 第 12 章 管道(中篇) .................................................................................................................. 467 12.1 中间件委托链 .................................................................................................................... 467 12.1.1 HttpContext ............................................................................................................ 467 12.1.2 中间件 ................................................................................................................... 468 12.1.3 中间件管道的构建 ................................................................................................ 469 12.2 服务器................................................................................................................................. 470 12.2.1 IServer .................................................................................................................... 471 12.2.2 针对服务器的适配 ................................................................................................ 471 12.2.3 HttpListenerServer ................................................................................................. 473 12.3 承载服务 ............................................................................................................................. 476 12.3.1 WebHostedService ................................................................................................. 476 12.3.2 WebHostBuilder ..................................................................................................... 476 12.3.3 应用构建 ................................................................................................................ 478 第 13 章 管道(下篇) ................................................................................................................... 480 13.1 请求上下文 ......................................................................................................................... 480 13.1.1 HttpContext ............................................................................................................ 480 13.1.2 服务器适配 ............................................................................................................ 483 13.1.3 获取上下文 ............................................................................................................ 487 13.1.4 上下文的创建与释放 ............................................................................................ 488 13.1.5 RequestServices ..................................................................................................... 489 13.2 IServer + IHttpApplication ................................................................................................. 491 13.2.1 IServer .................................................................................................................... 491 13.2.2 HostingApplication ................................................................................................ 492 13.2.3 诊断日志 ................................................................................................................ 495 13.3 中间件委托链 ..................................................................................................................... 501 13.3.1 IApplicationBuilder ................................................................................................ 501 13.3.2 弱类型中间件 ........................................................................................................ 504 13.3.3 强类型中间件 ........................................................................................................ 507 13.3.4 注册中间件 ............................................................................................................ 509 13.4 应用的承载 ......................................................................................................................... 510 13.4.1 GenericWebHostServiceOptions ............................................................................ 510 13.4.2 GenericWebHostService ........................................................................................ 512 13.4.3 GenericWebHostBuilder ........................................................................................ 515 13.4.4 ConfigureWebHostDefaults ................................................................................... 530 附录 A 实例演示 .............................................................................................................................. 533 第 14 章 静态文件 ........................................................................................................................... 537 14.1 搭建文件服务器 ................................................................................................................ 537 14.1.1 发布物理文件 ....................................................................................................... 537 14.1.2 呈现目录结构 ....................................................................................................... 540 14.1.3 显示默认页面 ....................................................................................................... 541 14.1.4 映射媒体类型 ....................................................................................................... 544 14.2 处理文件请求 .................................................................................................................... 545 14.2.1 条件请求 ............................................................................................................... 545 14.2.2 区间请求 ............................................................................................................... 549 14.2.3 StaticFileMiddleware ............................................................................................. 552 14.3 处理目录请求 .................................................................................................................... 563 14.3.1 DirectoryBrowserMiddleware ............................................................................... 563 14.3.2 DefaultFilesMiddleware......................................................................................... 567 第 15 章 路由 ................................................................................................................................... 571 15.1 路由映射 ............................................................................................................................ 571 15.1.1 路由注册 ............................................................................................................... 571 15.1.2 设置内联约束 ....................................................................................................... 574 15.1.3 默认路由参数 ....................................................................................................... 576 15.1.4 特殊的路由参数.................................................................................................... 578 15.2 终结点的解析与执行 ........................................................................................................ 580 15.2.1 路由模式 ............................................................................................................... 580 15.2.2 终结点 ................................................................................................................... 586 ASP.NET Core 3 框架揭秘(下册) X 15.2.3 中间件 .................................................................................................................... 593 15.3 路由约束 ............................................................................................................................. 599 15.3.1 预定义的 IRouteConstraint ................................................................................... 600 15.3.2 InlineConstraintResolver ........................................................................................ 602 15.3.3 自定义约束 ............................................................................................................ 603 第 16 章 异常处理 ........................................................................................................................... 607 16.1 呈现错误信息 ..................................................................................................................... 607 16.1.1 显示开发者异常页面 ............................................................................................ 607 16.1.2 显示定制异常页面 ................................................................................................ 610 16.1.3 针对响应状态码定制错误页面 ............................................................................ 612 16.2 开发者异常页面 ................................................................................................................. 615 16.2.1 IDeveloperPageExceptionFilter ............................................................................. 616 16.2.2 显示编译异常信息 ................................................................................................ 617 16.2.3 DeveloperExceptionPageMiddleware .................................................................... 622 16.3 异常处理器 ......................................................................................................................... 624 16.3.1 ExceptionHandlerMiddleware ............................................................................... 624 16.3.2 异常的传递与请求路径的恢复 ............................................................................ 626 16.3.3 清除缓存 ................................................................................................................ 629 16.4 响应状态码页面 ................................................................................................................. 631 16.4.1 StatusCodePagesMiddleware ................................................................................. 632 16.4.2 阻止处理异常 ........................................................................................................ 632 16.4.3 注册 StatusCodePagesMiddleware 中间件 ........................................................... 635 第 17 章 缓存 ................................................................................................................................... 642 17.1 将数据缓存起来 ................................................................................................................. 642 17.1.1 将数据缓存在内存中 ............................................................................................ 642 17.1.2 对数据进行分布式缓存 ........................................................................................ 644 17.1.3 缓存整个 HTTP 响应 ............................................................................................ 648 17.2 本地内存缓存 ..................................................................................................................... 651 17.2.1 ICacheEntry ........................................................................................................... 651 17.2.2 MemoryCacheEntryOptions ................................................................................... 654 17.2.3 IMemoryCache ....................................................................................................... 655 17.3 分布式缓存 ......................................................................................................................... 663 17.3.1 IDistributedCache .................................................................................................. 664 17.3.2 基于 Redis 的分布式缓存 ..................................................................................... 665 17.3.3 基于 SQL Server 的分布式缓存 ........................................................................... 668 17.4 响应缓存 ............................................................................................................................ 670 17.4.1 HTTP/1.1 Caching ................................................................................................. 670 17.4.2 ResponseCachingMiddleware 中间件 ................................................................... 673 17.4.3 注册中间件 ........................................................................................................... 680 第 18 章 会话 ................................................................................................................................... 681 18.1 利用会话保留“语境” .................................................................................................... 681 18.1.1 设置和提取会话状态 ............................................................................................ 681 18.1.2 查看存储的会话状态 ............................................................................................ 683 18.1.3 查看 Cookie ........................................................................................................... 685 18.2 会话状态的读写 ................................................................................................................ 686 18.2.1 ISession .................................................................................................................. 686 18.2.2 DistributedSession ................................................................................................. 687 18.2.3 ISessionStore ......................................................................................................... 688 18.3 SessionMiddleware 中间件 ................................................................................................ 689 18.3.1 SessionOptions ....................................................................................................... 689 18.3.2 ISessionFeature ...................................................................................................... 690 18.3.3 SessionMiddleware ................................................................................................ 691 第 19 章 认证 ................................................................................................................................... 694 19.1 认证、登录与注销 ............................................................................................................ 694 19.1.1 认证票据 ............................................................................................................... 694 19.1.2 基于 Cookie 的认证 .............................................................................................. 695 19.1.3 应用主页 ............................................................................................................... 696 19.1.4 登录与注销 ........................................................................................................... 698 19.2 身份与用户 ........................................................................................................................ 700 19.2.1 IIdentity .................................................................................................................. 700 19.2.2 IPrincipal ................................................................................................................ 707 19.3 认证模型 ............................................................................................................................ 710 19.3.1 认证票据 ............................................................................................................... 710 19.3.2 认证处理器 ........................................................................................................... 713 19.3.3 认证服务 ................................................................................................................ 720 19.3.4 服务注册 ................................................................................................................ 724 19.3.5 AuthenticationMiddleware ..................................................................................... 727 19.4 Cookie 认证方案 ................................................................................................................ 729 19.4.1 AuthenticationHandler<TOptions> ........................................................................ 729 19.4.2 CookieAuthenticationHandler ................................................................................ 735 19.4.3 注册 CookieAuthenticationHandler ....................................................................... 744 第 20 章 授权 ................................................................................................................................... 747 20.1 基于角色的权限控制 ......................................................................................................... 747 20.1.1 用户与角色的映射 ................................................................................................ 747 20.1.2 根据角色授权 ........................................................................................................ 750 20.1.3 预定义授权策略 .................................................................................................... 754 20.2 基于“要求”的授权 ......................................................................................................... 756 20.2.1 IAuthorizationRequirement .................................................................................... 756 20.2.2 预定义的 IAuthorizationRequirement 实现类型 .................................................. 758 20.2.3 授权检验 ................................................................................................................ 762 20.3 基于“策略”的授权 ......................................................................................................... 767 20.3.1 授权策略的构建 .................................................................................................... 768 20.3.2 授权策略的注册 .................................................................................................... 769 20.3.3 授权检验 ................................................................................................................ 770 第 21 章 跨域资源共享 ................................................................................................................... 773 21.1 处理跨域资源 ..................................................................................................................... 773 21.1.1 跨域调用 API ........................................................................................................ 773 21.1.2 资源提供者显式授权 ............................................................................................ 777 21.1.3 基于策略的资源授权 ............................................................................................ 779 21.2 CORS 规范 ......................................................................................................................... 780 21.2.1 同源策略 ................................................................................................................ 781 21.2.2 针对资源的授权 .................................................................................................... 781 21.2.3 获取授权的方式 .................................................................................................... 782 21.2.4 用户凭证 ................................................................................................................ 785 21.3 CORS 模型 ......................................................................................................................... 785 21.3.1 CORS 策略 ............................................................................................................ 786 21.3.2 解析并应用授权结果 ............................................................................................ 788 21.3.3 CorsMiddleware 中间件 ........................................................................................ 790 第 22 章 本地化 ............................................................................................................................... 793 22.1 提供本地化消息文本 ........................................................................................................ 793 22.1.1 提供对应语种的文本 ............................................................................................ 793 22.1.2 自动设置语言文化 ................................................................................................ 795 22.1.3 将本地化文本分而治之 ........................................................................................ 798 22.1.4 直接注入 IStringLocalizer<T>.............................................................................. 800 22.2 文本本地化 ........................................................................................................................ 801 22.2.1 字符串本地化模型 ................................................................................................ 801 22.2.2 基于 JSON 文件的本地化 .................................................................................... 804 22.2.3 基于资源文件的本地化 ........................................................................................ 810 22.3 当前语言文化的设置 ........................................................................................................ 814 22.3.1 Culture 与 UICulture ............................................................................................. 814 22.3.2 IRequestCultureProvider ........................................................................................ 815 22.3.3 RequestLocalizationOptions .................................................................................. 820 22.3.4 RequestLocalizationMiddleware............................................................................ 821 第 23 章 健康检查 ........................................................................................................................... 822 23.1 检查应用的健康状况 ........................................................................................................ 822 23.1.1 确定当前应用是否可用 ........................................................................................ 822 23.1.2 定制健康检查逻辑 ................................................................................................ 823 23.1.3 改变响应状态码.................................................................................................... 825 23.1.4 细粒度的健康检查 ................................................................................................ 826 23.1.5 定制响应内容 ....................................................................................................... 828 23.1.6 过滤 IHealthCheck 对象 ....................................................................................... 830 23.2 设计与实现 ........................................................................................................................ 832 23.2.1 IHealthCheck ......................................................................................................... 832 23.2.2 HealthCheckService ............................................................................................... 838 23.2.3 HealthCheckMiddleware ....................................................................................... 842 23.2.4 针对 Entity Framework Core 的健康检查 ............................................................ 846 23.3 发布健康报告 .................................................................................................................... 850 23.3.1 定期发布健康报告 ................................................................................................ 850 23.3.2 IHealthCheckPublisher........................................................................................... 851 23.3.3 HealthCheckPublisherHostedService ..................................................................... 852 第 24 章 补遗 ................................................................................................................................... 856 24.1 过滤主机名 ......................................................................................................................... 856 24.1.1 实例演示 ................................................................................................................ 856 24.1.2 配置选项 ................................................................................................................ 857 24.1.3 HostFilteringMiddleware 中间件 .......................................................................... 858 24.2 HTTP 重写 .......................................................................................................................... 859 24.2.1 实例演示 ................................................................................................................ 859 24.2.2 HttpMethodOverrideMiddleware 中间件 .............................................................. 863 24.2.3 ForwardedHeadersMiddleware 中间件 ................................................................. 864 24.3 基础路径 ............................................................................................................................. 872 24.3.1 实例演示 ................................................................................................................ 873 24.3.2 UsePathBaseMiddleware ....................................................................................... 874 24.4 路由 .................................................................................................................................... 876 24.4.1 实例演示 ................................................................................................................ 876 24.4.2 MapMiddleware ..................................................................................................... 878 24.4.3 MapWhenMiddleware ............................................................................................ 880 附录 B 实例演示 .............................................................................................................................. 882

作者简介

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个