书名:深入浅出 ASP.NET Core
ISBN:978-7-115-54109-3
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 梁桐铭
责任编辑 陈聪聪
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
本书是一本系统地介绍ASP.NET Core、Entity Framework Core以及ASP.NET Core Identity框架技术的入门图书,旨在帮助读者循序渐进地了解和掌握ASP.NET Core。本书使用ASP.NET Core从零开始搭建一个实际的项目。从基本的控制台应用程序开始,介绍ASP.NET Core基本的启动流程,涵盖ASP.NET Core框架中各个技术的实际应用。同时,本书也会介绍一些ASP.NET Core的高级概念。在本书中,我们会开发一个学校管理系统,其中包含清晰的操作步骤和大量的实际代码,以帮助读者学以致用,将ASP.NET Core的知识运用到实际的项目开发当中,最后我们会将开发的项目部署到生产环境中。通过阅读本书,读者将掌握使用ASP.NET Core开发Web应用程序的方法,并能够在对新项目进行技术选型时做出战略决策。
本书适合有一定C# 编程经验和HTML、JavaScript基础,并对ASP.NET Core感兴趣的读者阅读,也可以作为高等院校相关专业的教学用书和培训学校的教材。
我和桐铭应该是通过ABP(ASP.NET Boilerplate)技术交流所相识,但是进一步结缘则是因为微软最有价值专家项目(MVP)。了解我的人应该知道,作为一个老MVP,我长期在成都地区组织微软技术相关的社区活动。和他认识的时候,我由于工作原因正好需要找一个“接班人”来继续组织成都的微软技术社区。虽然我们刚刚认识,但是我感觉到了梁桐铭身上对微软技术以及社区贡献的热情,也许就差那么一点点勇气。于是,在我的鼓动之下,他开始参与并组织社区活动,成功获得了MVP的称号且连任至今。
最近,我完成了公司内部一个关于技术领导力的培训课程,其中着重提到了技术领导力的六大秉性:勇气、影响、愿景、创新、赋能和连接。而这六大秉性也是MVP这个项目所看重和提倡的,尤其勇气这一秉性,我相信更是促进一个人成长并做出更大成绩的必要条件。正是在勇气的驱动之下,梁桐铭不仅通过52ABP这样的开源项目向社区推广了ABP这一优秀而强大的Web开发框架,也通过这本书的内容向大家介绍了ASP.NET Core开发的方方面面。
本书由浅入深从中间件、配置、依赖注入和TagHelper这样的基础知识开始,逐步深入到MVC、Web API等内容,从而帮助大家夯实基本的ASP.NET Core开发技能。随后,本书又结合实例项目的开发过程,进一步给大家清晰讲解了验证与授权、数据访问、部署乃至领域驱动这样的高级话题。我相信,具备一定编程基础,尤其有过.NET开发经验的读者,通过阅读本书可以很快进入全新的ASP.NET Core开发领域。我更加相信,掌握ASP.NET Core的开发是通向下一个开发时代的敲门砖和必备技能。
虽然.NET错过了所谓互联网(尤其电商)和移动互联网的开发时代,上一代.NET技术和.NET开发人员显得稍许失落。但是软件开发的世界唯一不变的东西就是不断的变化,而未来的开发技术会往微服务和无服务器等技术为代表的云原生方向发展,同时随着5G时代的到来,IoT和边缘计算开发也会越来越重要。值得庆幸的是,.NET Core和ASP.NET Core创建的初衷就是为了适应多种目标平台,.NET Core和ASP.NET Core这样的技术已经为云原生、IoT和边缘计算做好了准备。.NET技术和.NET开发人员在新的时代必将大放异彩。
微软高级技术顾问 朱永光
2020年6月7日于成都
在互联网技术飞速发展的今天,云计算、人工智能、大数据和云原生应用等新兴技术方向为IT时代带来了一波又一波的浪潮,也对软件开发者提出了更高的要求。尤其在Web开发领域,应运而生的新概念总是让人目不暇接。
对于Web开发者来说,软件开发已经从传统的单体架构开始逐步演进,比如单体应用架构、分布式部署、面向服务式(SOA)架构以及目前大行其道的微服务架构,都在不停地刷新开发者的技术认知。
由于与Windows平台的深度绑定,传统的ASP.NET技术极大地限制了 .NET技术的应用范围。 2014年微软审时度势,推出的跨平台的ASP.NET Core技术,成为 .NET技术发展史上一次非常重要的变革,它带给数百万开发者一个进入全新领域的机会。
放眼全球,目前 .NET平台具有得天独厚的优越条件。它是市场上唯一能涵盖人工智能、物联网、桌面开发、网页开发、云原生应用、移动应用和游戏开发等细分领域的开发框架。
而随着 ASP.NET Core被越来越多的知名企业应用在商业项目中,开发者社区也推出了大量基于 ASP.NET Core的周边组件,不停地丰富着 ASP.NET Core的生态。
作为 .NET Framework的新一代版本, .NET Core基于.NET Framework 4.x进行了重新设计,更改了体系结构,形成了更精简的模块化框架。随着自身的不断完善, .NET Core新平台已经在软件开发领域扮演越来越重要的角色。
随着学习 ASP.NET Core的开发者越来越多,一部分开发者通过官方文档即可入门。但也有很多开发者感觉学习时有些吃力,主要的原因就是市面上缺乏能够用于系统学习 ASP.NET Core的资料。
虽然微软已经针对 ASP.NET Core提供了大量的官方文档,但是对于初学者来说,这些知识难免有点晦涩,缺少便于上手的操作手册。初学者很容易将自己淹没在海量的SDK文档中,因此有一本能系统地介绍ASP.NET Core的图书是很有必要的。
这也是本书应运而生的目的和价值,同时本书是采用ASP.NET Core 3.1进行实践,它是微软要长期支持的版本,可能本书发布的时候.NET 5已经出现了,但是它并不是微软长期支持的版本, .NET 6才是LTS(长期支持)的版本。
如果项目需要长期运行和开发的话,推荐采用ASP.NET Core 3.1或者.NET 6这样的长期支持版本。
梁桐铭
我在2018年成立了52ABP,开始尝试基于ABP做基础设施,搭建的应用框架起名为52ABP。我也接触到了各类人群,很多初学者、中高级开发工程师,甚至是跨行业的人都找到我,有让我教他们编程的,有让我开培训班的,有找我做项目的。目的各有不同,但是相似点就是,我们喜欢.NET、喜欢C#。但是目前市场上,相关的优秀学习视频和图书较少,想系统地学习比较困难。
2019年3月辞职后,同年5月一次偶然的机会,我有幸遇到了人民邮电出版社的陈聪聪编辑。她问我是否有兴趣出版一本ASP.NET Core的基础图书,我觉得这是一个机会,就答应了。其实当时我已经写了一部分内容,是配合基础视频的参考文档,但是距离一本图书还差得远。半年过去了,我也才完成了一小半,说来真是惭愧。
这本书原本的计划是描述EF Core中的知识点,带领读者完整地做一个管理系统。但是个人觉得这样写与市场上的其他图书没有什么区别,它就是一本概述知识点的图书,无非多了一个较为完整的功能系统而已。对于我而言这是有落差的。有一天和朋友吃饭,他建议把ABP中那些有效的、目前市场上流行的设计理念整合进图书,不用讲解得太明白,只是告诉读者如何用以及这么用的好处即可。
这个建议我是认同的,但是也有点担心,这样做之后,这本书会变得“不伦不类”,怕在后面涉及思想的时候会弄巧成拙。不过,我也相信人生的每一个阶段都需要不停地学习,已经30岁的我,或许确实没有那些“互联网大厂”架构师华丽的履历或头衔,但是我一直在学习,并且从未停止。学习的乐趣让我充实,而这些学习的过程也让我收获颇多。随着读的书越来越多,我也经常跟许多.NET技术社区或其他架构社区的朋友一起交流,这也让我认识到,自己已经初步具备把自己学到的一些知识传授出来的能力了。虽然我已尽力提高本书的质量,但若有考虑不周或描述不妥当的地方,还望各位读者海涵。
本书只是一个开始,如果读者在学习知识点的过程中遇到疑问,可以关注我的微信公众号角落的白板报,并给我留言,我会尽量为读者提供思路或者解决方案。当然,随着本书的出版,我也会考虑建立相关的社区,我相信有了社区的帮助,更多的人将有所收获。
本书适合有一定的C# 编程经验和HTML、 JavaScript基础,并对ASP.NET Core感兴趣的开发者,包括以下对象。
.NET工程师。
计算机相关专业的 .NET或网页设计方向的在校大学生。
从其他面向对象语言转向学习 .NET编程的开发者。
本书分为以下5个部分。
第一部分(第1章~第9章)介绍ASP.NET Core的基础知识,比如中间件、环境变量和配置信息等,简单讲解完整的ASP.NET Core的项目结构。
第二部分(第10章~第20章)介绍并运用MVC模型及路由中间件,结合ASP.NET Core提供的TagHelper等新特性,完成对学生信息的增删改查、图片上传;介绍简单的仓储模式与依赖注入的关系,为搭建管理系统做好基础准备。
第三部分(第21章~第29章) 通过搭建一个基础管理系统,分析及处理实际业务场景中的常见问题,比如身份验证和授权、客户端及服务端验证、配置信息、 EF Core数据访问、数据分页和统一异常处理等。
第四部分(第30章~第38章) 介绍架构的作用以及意义,根据架构的思想应用设计模式,结合C#泛型特性优化仓储模式,建立多层体系架构,通过并发、 LINQ及活用Entity Framework Core中的常用功能完成一个类似领域驱动设计的项目。
第五部分(第39章~第42章)介绍简单的Web API入门、部署ASP.NET Core项目以及从ASP .NET Core 2.2到ASP.NET Core 3.1的版本升级过程。
要完成本书中的练习,读者需要配备以下的硬件和软件。
Windows 7或更高版本。
macOS 10.12或更高版本。
Linux,比如CentOS、 Ubuntu等。
Visual Studio 2019或更高版本(如企业版、专业版和社区版)。
Visual Studio Code。
我使用的操作系统为Windows 10,开发工具是Visual Studio 2019专业版。同时计算机需要联网,用于下载软件及项目所需的数据库文件。
梁桐铭,微软最有价值专家(Microsoft MVP)、 Microsoft AI Open Hack教练、Microsoft Tech Summit 2018讲师和52ABP开源框架作者。我从2015年开始在国内推广ASP.NET Boilerplate Project开源框架,拥有多年的项目开发与技术团队管理经验,熟悉互联网及电商行业,负责过多个大型项目的开发和管理,擅长应用系统项目规划及企业解决方案的设计。读者可以通过关注微信公众号(角落的白板报)联系我。
创作本书的过程充满了曲折,如果没有其他人的帮助,也就不会有本书的存在了。
感谢参与本书审校的李志强、邹锭、朱国栋、王冠,他们参与审校没有获取报酬,对待本书就像对待自己的孩子一样,提出了详细的反馈和经过深思熟虑的见解,正因为有他们的反复阅读、勘误,以及给予的建议,才让本书的内容更加完善,谢谢他们。
感谢本书的编辑陈聪聪,没有她的帮助,本书肯定是无法完成的,再多的言语也无法表达我的感激之情。
感谢微软最有价值专家项目组Christina Liang对我的支持。
最后,感谢家人对我的支持。
虽然我尽量夯实本书的内容,但是由于自身水平有限,书中难免出现不太准确的地方,恳请读者批评指正。读者可提出宝贵意见,让我们在学习ASP.NET Core的道路上共同进步。
我希望本书能够启发读者,给读者的工作带来帮助!如果需要额外的支持,可以给作者发送邮件,邮件地址是ltm@ddxc.org。
在本书的写作过程中,我得到了很多人的鼓励和支持,在此表示感谢。除此之外,在写作和编码的过程中,我还参考了很多图书和资料,在此也向其作者表示感谢。
本书中的网址仅供学习使用。
梁桐铭
本书由异步社区出品,社区(https://www.epubit.com/)为读者提供相关资源和后续服务。
本书提供如下资源:
要获得以上配套资源,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎读者将发现的问题反馈给我们,帮助我们提升图书的质量。
当读者发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可,如下图所示。本书的作者和编辑会对读者提交的勘误进行审核,确认并接受后,读者将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果读者对本书有任何疑问或建议,请读者发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果读者有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线投稿(直接访问www.epubit.com/selfpublish/submission即可)。
如果读者所在的学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果读者在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请读者将怀疑有侵权行为的链接发邮件给我们。读者的这一举动是对作者权益的保护,也是我们持续为读者提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。
异步社区
微信服务号
在跟随本书的思路开始我们的ASP.NET Core学习之旅前,我们来讨论一个初学者很容易产生的疑惑:C# 和 .NET是什么关系。
很多初学者不清楚C# 和 .NET之间的关系。在开发过程中遇到程序异常或错误时,容易对哪些技术是关于C# 的、哪些内容是关于 .NET的产生混淆,无法准确定位和解决问题。
在本章,我将带领读者厘清其中的关系。
本章主要向读者介绍如下内容。
根据维基百科的解释,编程语言(Programming Language)是用来定义计算机程序的形式语言,是一种被标准化的交流技巧,用来向计算机发出指令。计算机语言让程序员能够准确地定义计算机所需要使用的数据,并精确地定义在不同情况下应当采取的行动。
我们接触到的C#、F#、VB、Java、C、C++、Python、Ruby和JavaScript等都是编程语言。而 .NET则是一个通用的开发平台,它包含了.NET Framework、Mono和.NET Core等技术框架,旨在为开发者提供一个具有一致性的编程环境,让代码、部署、版本控制以及基于标准API进行的开发工作都有统一的封装和构建方式,帮助开发者提升开发效率,为用户带来良好的体验。
微软积极开发和支持3种面向 .NET的编程语言:C#、F#和VB.NET。
C# 是一种编程语言,它运行在 .NET Framework/Core CLR上,是用于创建应用程序的高级语言。
.NET是一个通用开发平台,其中包含 .NET Framework、.NET Core和Mono等框架。
.NET Framework中有一套名为公共语言运行时(Common Language Runtime, CLR)的虚拟执行系统和一组统一的.NET框架类库(.NET Framework Class Library,.NET FCL)。
.NET拥有公共语言基础结构 (Common Language Infrastructure,CLI),其中包括与语言无关的运行时和语言互操作性。这意味着读者可以选择任何 .NET平台上的编程语言构建应用程序和服务。
因为 .NET支持多种编程语言,所以读者可以使用C#、F# 或VB.NET编写 .NET应用程序。
本章主要介绍什么是编程语言以及什么是C#和.NET,目的是让读者明白C#是编程语言,而.NET是一个支持多种开发语言的通用平台。
我们通过C#编写的代码可运行在.NET这个平台上,这就是二者之间的关系。
本书中的大多数代码所使用的编程语言都为C#,部分内容使用的是JavaScript、HTML或CSS。