作为一个17年的.NET开发者,我对一件事特别不能理解:我们的计算机图书市场充斥着一系列介绍ASP.NET Web Forms、ASP.NET MVC、ASP.NET Web API的书籍,但是却找不到一本专门介绍ASP.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的学习和研究,并在之后开始了本书的写作。

在我过去尚算丰富的写作经历中,《ASP.NET Core 3框架揭秘》算作耗时最长(差不多5年),投入心血最多的一本书。2015年初,我们敲下了本书的第一行文字,微软在2016年6月正式发布.NET Core 1.0的时候,本书的绝大部分内容就已经完成。 随后微软不断推出新的版本,本书的内容也在不断的快速“迭代”中。你手中的这本书共计800多页,我在写作过程中删除的文字也能达到这个数字。

有的人可能会说,我每天只是做一些简单的编程工作,根本没有必要去了解底层原理和设计方面的内容。其实不论我们从事何种层次的工作,最根本的目的只有一个,那就是解决问题。解决方案分两种,一种叫做“扬汤止沸”,另一种被称为“釜底抽薪”。由于只看到锅里不断沸腾的水,你只能不断地往锅里浇冷水,我们希望这本书能够让你看到锅底熊熊燃烧的薪火。

《ASP.NET Core 3框架揭秘》(上下册)在本月正式上市,为此出版社专门创建了一个微信群,。由于目前人数已经超过200人,只能通过邀请方能加入。有兴趣的朋友可以搜索微信账号“broadview002”(博文小丸子)并添加为好友,并在申请消息中指定本书书号“38462”,出版社工作人员将自动帮你添加到该微信群。

一、本书内容

ASP.NET Core一个全新的Web开发平台,它为我们构建一个可复用和可定制的请求处理管道,微软在它上面构建了MVC、SingalR、GRPC、Orleans这样广泛使用的Web框架,我们也可以利用它构建自己的Web框架(比如我曾经在ASP.NET Core构建了一款GraphQL框架)。本书只关注最本质的东西,即ASP.NET Core请求处理管道,并不会涉及上述这些Web框架,本书的内容主要划分为如下四个部分。

跨平台的开发体现和实现原理

跨平台是.NET Core区别于传统.NET Framework最大的特征,作为开篇入门材料,本书第1章“跨平台的开发体验”会通过几个简单的Hello World程序让读者体验在Windows、Mac OS、Linux平台上开发.NET Core应用,以及通过Docker容器部署ASP.NET Core应用的乐趣。随后的第2章 “跨平台的奥秘” 将告诉你.NET Core的跨平究竟是如何实现的。

基础框架

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章 “诊断日志(上篇)” 会介绍五种常用的记录诊断日志的方式。.NET Core还提供了一个支持多种输出渠道的日志系统,针对该日志系统在第9章 “诊断日志(下篇)” 具有非常详细的介绍。

管道详解

.NET Core的服务承载系统用来承载那些需要长时间运行的服务,ASP.NET Core作为最为重要的服务类型被承载与该系统中,第10章 “承载系统” 会对该服务承载系统进行系统介绍。由于请求处理管道是整本书的核心所在,所以我们采用了整整三章的篇幅来介绍这个部分。第11章 “管道(上篇)” 主要从编程模型的角度来认识管道。第12章 “管道(中篇)” 提供了一个极简版的模拟框架来展示ASP.NET Core框架的总体设计。在随后的第13章 “管道(下篇)” 中,我们以这个模拟框架为基础,采用渐进的方式补充一些遗漏的细节,进而将ASP.NET Core框架真实的管道展现在读者眼前。

中间件

ASP.NET Core框架的请求处理管道由服务器和中间件组成,管道利用服务器来监听和接收请求,将完整最终对请求的响应,应用针对请求的处理则体现在有序排列的中间件上。微软为我们提供了一系列原生的中间件,针对这些中间件的介绍全部放在了本书的下册。

这部分涉及用来处理文件请求(第14章 “静态文件” )、路由(第15章 “路由” )、异常处理(第16章 “异常处理” )的中间件,也包括用来响应缓存(第17章 “缓存” )和会话(第18章 “会话” )的中间件,还包括用来实现认证(第19章 “认证” )、授权 “(第20章 “授权” )、跨域资源共享(第21章 “跨域资源共享” )等与安全相关的中间件。

这部分还介绍了针对本地化(第22章“本地化”)和健康检查(第23章“健康检查”)的中间件。除此之外,我们还提供用来实现主机名过滤、HTTP重写、设置基础路径等功能的中间件,这些零散的中间件全部被收入最后一章(第24章“补遗”)中。

二、写作特点

《ASP.NET Core 3框架揭秘》算是揭秘系列的第6本书了。在过去十来年里,我得到了很多来自热心读者的反馈,这些反馈对书的内容基本上都持正面的评价,但对写作技巧和表达方式的评价则不尽相同。虽然每个作者都由属于自己的写作风格,每个读者的学习思维方式也不仅相同,两者很难出现100%的契合,但是我还是决定在这本书上做出改变。

本书的内容采用了不一样的组织方式,我觉得这样的方式更符合系统地学习一门全新技术的“流程”。对于每一个模块,我会采用“体验现行”的原则,提供一些简单的实例演示让读者对当前模块的基本功能特性和编程模式具有大致的了解。我们会在编程体验中抽取出一些核心的对象,并利用它们构建出当前模块的抽象模型,读者读懂了这个模型也就了解了当前模块的总体设计。接下来我们从抽象转向具体,进一步深入介绍抽象模型的实现原理。为了让读者能够将在真实项目中灵活自如地运用当前的模块,我们会介绍一些面向应用的扩展和最佳实践。总地来说,本书采用 “编程体验”、“总体设计”、“具体实现”和“灵活运用”这样流程来让读者循序渐进地学习ASP.NET Core的每个功能模块。

本书综合运用了三种不同的“语言”来讲述每一个技术主题,它们分别是文字语言、图表语言和编程语言。一图胜千言,我在每一章节中都精心设计了很多图表,这些具象的图表能够帮助读者朋友们更容易地理解技术模块的总体设计、执行流程和交互方式。除了利用编程语言描述应用编程接口(API)之外,全书提供了近200个实例,这些实例具有不同的作用,它们有的是为了演示某个实用的编程技巧或者最佳实践,有的是为了强调一些容易忽视但很重要的技术细节,还有的是为了探测和证明所述的论点。

本书在很对地方会展示一些类型的代码,但是这些代码是和真正的源代码是有差异的,两者差异源于几个原因:第一、源代码在版本更替中一直在发生改变;第二、由于篇幅的限制,我会刻意删除一些细枝末节的代码,比如针对参数的验证、诊断日志的输出和异常处理等;第三、很多源代码其实都具有优化的空间。综上所述,本书中提供的代码片段旨在揭示设计原理和实现逻辑,不是为了向读者展示源代码。

三、目标读者

虽然《ASP.NET Core 3框架揭秘》关注的是ASP.NET Core自身框架提供请求处理管道,而不是具体某个应用编程框架(比如MVC、SingalR、GRPC等),但是这本书适合所有.NET技术从业人员。

我个人觉得任何好的设计都应该是简单的设计,唯有简单的设计才能应对后续版本更替中出现的复杂问题。从这个意义上讲,ASP.NET框架的设计就是“好的设计“,因为自它正式推出的那一刻起,其总体设计基本上就没有发生改变。ASP.NET Core的设计同样是” 好的设计 “,其简单的管道式设计在未来的版本更替中也不会发生太大的改变,既然是好的设计,它就应该简单。

正如上面所说,本书采用的“渐进式”的写作方式,即使对于那些完全没有接触过ASP.NET Core的开发人员,都会很容易通过本书深入并系统掌握这门技术。由于本书提供的大部分内容都是独一无二的,即使是非常资深的.NET开发设计人员,我相信也能在书中找到很多不甚了解的盲点。

四、目录

上册

下册

《ASP.NET Core 3框架揭秘》读者群,欢迎加入的更多相关文章

  1. 《ASP.NET Core 3框架揭秘》博文汇总

    在过去一段时间内,写了一系列关于ASP.NET Core 3相关的文章,其中绝大部分来源于即将出版的<ASP.NET Core 3框架揭秘>(博文只能算是"初稿",与书 ...

  2. 《ASP.NET Core 3框架揭秘》5折预售[发布试读章节]

    <ASP.NET Core 3框架揭秘>于昨天在下午京东正式开始预售,并在半天之内销售近一千套.为了回馈读者,出版社与京东谈了一个5折的价格,这是一个连我都没有想到的价格,至少我写着几本书 ...

  3. 《ASP.NET Core 3框架揭秘》5折预售暨样章发布

    <ASP.NET Core 3框架揭秘>于昨天在下午京东正式开始预售,并在半天之内销售近一千套.为了回馈读者,出版社与京东谈了一个5折的价格.与此同时,我将本书最核心的内容作为样章(3章) ...

  4. ASP.NET Core 6框架揭秘-实例演示版[持续更新中…]

    作为<ASP.NET Core 3框架揭秘>的升级版,<ASP.NET Core 6框架揭秘>提供了很多新的章节,同时对现有的内容进行大量的修改.虽然本书旨在对ASP.NET ...

  5. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [上篇]

    微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...

  6. [ASP.NET Core 3框架揭秘] 跨平台开发体验: Docker

    对于一个 .NET Core开发人员,你可能没有使用过Docker,但是你不可能没有听说过Docker.Docker是Github上最受欢迎的开源项目之一,它号称要成为所有云应用的基石,并把互联网升级 ...

  7. [ASP.NET Core 3框架揭秘] 依赖注入:控制反转

    ASP.NET Core框架建立在一些核心的基础框架之上,这些基础框架包括依赖注入.文件系统.配置选项和诊断日志等.这些框架不仅仅是支撑ASP.NET Core框架的基础,我们在进行应用开发的时候同样 ...

  8. [ASP.NET Core 3框架揭秘] 依赖注入[5]: 利用容器提供服务

    毫不夸张地说,整个ASP.NET Core框架是建立在依赖注入框架之上的.ASP.NET Core应用在启动时构建管道以及利用该管道处理每个请求过程中使用到的服务对象均来源于依赖注入容器.该依赖注入容 ...

  9. [ASP.NET Core 3框架揭秘] 文件系统[1]:抽象的“文件系统”

    ASP.NET Core应用 具有很多读取文件的场景,比如配置文件.静态Web资源文件(比如CSS.JavaScript和图片文件等)以及MVC应用的View文件,甚至是直接编译到程序集中的内嵌资源文 ...

随机推荐

  1. 2019-2020-1 20199324《Linux内核原理与分析》第三周作业

    第二章 操作系统是如何工作的 一.知识点总结 1.计算机的三个法宝 存储程序计算机 函数调用堆栈机制.堆栈:是C语言程序运行时必须使用的记录函数调用路径和参数存储的空间. 中断 2.堆栈相关的寄存器和 ...

  2. 52)PHP,加了单例模式的数据库代码

    <?php class db { public $host ;//= "localhost";//定义默认连接方式 public $User;//= "root&q ...

  3. 2018-1 WebStorm最新版本破解激活方法

    在激活页面选择License Server,输入:http://idea.codebeta.cn,点击Activate即可激活. 如果失效用这个:  http://idea.ibdyr.com

  4. Qt Sleep、QCoreApplication::processEvents()(最佳的平衡:一边发送消息,一边睡眠)

    sleep()//秒 msleep()//毫秒 usleep()//微秒 以前为了模拟鼠标点击用过这些函数,可以让进程中断,今天发现我原来的做法其实不对.这组函数会将你当前的线程/进程变为“睡眠”状态 ...

  5. Python面向对象三大特征

    继承 面向对象中的继承就是继承的类直接拥有被继承类的属性而不需要在自己的类体中重新再写一遍,其中被继承的类叫做父类.基类,继承的类叫做派生类.子类.在python3中如果不指定继承哪个类,默认就会继承 ...

  6. Java IO: 字符流的Buffered和Filter

    作者: Jakob Jenkov  译者: 李璟(jlee381344197@gmail.com) 本章节将简要介绍缓冲与过滤相关的reader和writer,主要涉及BufferedReader.B ...

  7. abrupt|promising

    N-VAR 典礼;(宗教)仪式A ritual is a religious service or other ceremony which involves a series of actions ...

  8. 第十六届“二十一世纪的计算”学术研讨会 图灵奖获得者Butler W. Lampson主题演讲

    Personal Control of Digital Data 图灵奖获得者Butler W. Lampson主题演讲" title="第十六届"二十一世纪的计算&qu ...

  9. mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法

    在卸载mudbox重装mudbox时发现安装失败,提示是已安装mudbox或安装失败.这是因为上一次卸载mudbox没有清理干净,系统会误认为已经安装mudbox了.有的同学是新装的系统也会出现mud ...

  10. <JZOJ5941>乘

    emmm还挺妙 不过我没想到qwq 考场上瞎写的还mle了心碎 把b分两..预处理下 O1询问qwq #include<cstdio> #include<iostream> # ...