本书主要阐述 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 的每次版本升级,笔者基本上会尽可能将书中的内容做相应的更改,但其中难免有所疏漏。由于笔者的能力和时间有限,书中难免存在不足之处,恳请广大读者批评指正。
下载个源码,又关注公众号,又注册的
这源码是什么垃圾? 有啥参考价值??
大哥 真的没必要吧。gitee github 甚至百度网盘都行吧。还需要大家注册一个账号。
下载的文件怎么是空的?
确实不好。下载源码,都要注册,还不知道,下次什么时候用,一次性注册用户真的没有意义