ASP.NET Core 3框架揭秘
  • 推荐0
  • 收藏6
  • 浏览2.0K

ASP.NET Core 3框架揭秘

蒋金楠 (作者) 

  • 书  号:978-7-121-38462-2
  • 出版日期:2020-03-19
  • 页  数:916
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:张春雨
纸质版 ¥199.00
本书主要阐述 ASP.NET Core 最核心的部分——请求处理管道。通过阅读本书,读者可以深刻系统地了解 ASP.NET Core 应用在启动过程中管道的构建方式,以及请求在管道中的处理流程。本书还详细讲述了 .NET Core 跨平台的本质,以及多个常用的基础框架(如依赖注入、文件信息、配置选项和诊断日志等)。本书还对大部分原生的中间件提供了系统性介绍,采用“编程体验”、“总体设计”、“具体实现”和“灵活运用”的流程,使读者可以循序渐进地学习 ASP.NET Core 的每个功能模块。本书可供所有 .NET 从业人员阅读与参考。
.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 ........................................................ 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 ................................................................................... 226
7.2.2 IOptionsFactory .................................................................................... 228
7.2.3 IOptionsMonitorCache ......................................................................... 237
7.2.4 IOptionsMonitor ................................................................................... 238
7.3 依赖注入 .............................................................................................................................. 240
7.3.1 服务注册 ................................................................................................................. 240
7.3.2 IOptions与 IOptionsSnapshot ........................................... 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 ........................................................................................ 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 ........................................................................ 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.............................................................................. 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

读者评论

  • 压缩包的资源文件下载后显示是空的

    king777发表于 2020/5/19 19:09:27

相关图书

程序员修炼之道:通向务实的最高境界(第2版)

THOMAS, DAVID; HUNT, ANDREW (作者)

《程序员修炼之道》之所以在全球范围内广泛传播,被一代代开发者奉为圭臬,盖因它可以创造出真正的价值:或编写出更好的软件,或探究出编程的本质,而所有收获均不依赖于特...

¥89.00

Java持续交付

Daniel Bryant (作者) 张若飞 (译者)

随着Java 8的发布,以及Spring引导等web/微服务框架的可用性,设计和实现Java驱动的应用程序从来都不是一个更好的时机。但是,在不断向生产环境交付工...

¥119.00

读故事学编程——Python王国历险记(双色)

李伟 (作者)

这是一本故事书,也是一本编程书。<br>小男孩派森无意中闯入神秘国度—Python 王国,恰好遇到了国王的鹦鹉,于是他们开始了奇幻的冒险之旅。在这个过程中,他们...

¥69.00

21天学通HTML5+CSS3(第2版)

张启玉 刘刚 (作者)

本书全面、系统、深入地讲解了HTML5+CSS3网页设计与编程的基础知识与高级应用。在讲解过程中,通过大量取自实际操作的案例,将网页开发知识全面、系统、深入地呈...

¥89.90

寻声记:Scratch 3.0趣味编程之旅(全彩)

王晓辉 (作者)

本书是一本编程故事书,以Scratch 3.0作为编程设计工具,围绕一只小猫“喵喵呱” 找回叫声的故事展开全书内容。  <br>本书包含9章共27节,通篇注重情...

¥69.00

Java编程方法论:响应式RxJava与代码设计实战

知秋(李飞) 李飞 (作者)

本书对RxJava 2的源码进行了深入解读,让读者可以从设计到实现细节上全面了解它,从而达到不仅会用而且可以进行RxJava 2源码库组件级别的拓展的程度。本书...