书名:精通ASP.NET Core MVC (第7版)
ISBN:978-7-115-55961-6
本书由人民邮电出版社发行数字版。版权所有,侵权必究。
您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。
我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。
如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。
著 [美] 亚当•弗里曼(Adam Freeman)
译 郝冠军 孙 臻 闫小迪 张淯易
责任编辑 谢晓芳
人民邮电出版社出版发行 北京市丰台区成寿寺路11号
邮编 100164 电子邮件 315@ptpress.com.cn
网址 http://www.ptpress.com.cn
读者服务热线:(010)81055410
反盗版热线:(010)81055315
Translation from the English language edition
Pro ASP.NET Core MVC 2, Seventh Edition by Adam Freeman
Copyright © Springer International Publishing Switzerland 2017
This work is published by Springer Nature
The registered company is Springer International Publishing AG
All Rights Reserved by the Publisher
本书中文简体字版由施普林格出版社授权人民邮电出版社出版。未经出版者书面许可,不得以任何方式复制或抄袭本书任何部分。
版权所有,侵权必究。
本书详细解释ASP.NET Core MVC的架构、功能和应用,深入阐述构建现代可扩展的Web应用程序的工具、技术和方法,揭示如何为.NET Core平台创建轻型的移动端应用程序。本书主要内容包括MVC模式、C#基本特性、Razor、Visual Studio、MVC应用程序的单元测试、实际应用程序的创建、URL路由、高级路由特性、控制器、依赖注入、过滤器、API控制器、视图、视图组件、标签助手、模型绑定、模型验证、ASP.NET Core Identity、模型约定和操作约束等。
本书适合.NET开发人员和 Web开发人员阅读,也可供计算机相关专业的师生阅读。
Adam Freeman是一位经验丰富的IT专家,曾在一系列公司担任高级职务,最后的职务是一家全球性银行的首席技术官(Chief Technology Officer,CTO)和首席运营官(Chief Operating Officer,COO)。退休以后,他喜欢写作和长跑。
Fabio Claudio Ferracchiati是一名高级咨询师、高级分析师/开发人员,擅长使用微软的技术。他目前就职于BluArancio公司。他是微软认证的.NET解决方案开发人员、微软认证的.NET应用程序开发人员、微软认证的专业人士,还是一位笔耕不辍的作者。在过去十年中,他为意大利和国际杂志撰文,在计算机领域与他人合著了十几本图书。
虽然ASP.NET Core MVC 3 已经发布了,但是本书的翻译和出版非常及时,内容非常不错,满足了成千上万希望学习.NET的开发人员对更好的学习资料的强烈需求,感谢本书的译者花时间翻译了一本好书,帮助中国的开发者利用ASP.NET Core MVC构建应用。
本书是ASP.NET方面的畅销书,作者Adam Freeman在本书里对ASP.NET Core MVC进行了详细介绍,说明了如何从ASP.NET Core MVC中获得最大收益。结合具体示例和代码,本书展示了ASP.NET Core MVC的方方面面,解释了如何使用ASP.NET Core MVC构建Web应用程序。
本书围绕ASP.NET Core MVC深入探讨构建可扩展的Web应用程序所需要的工具和技术,有助于开发人员为.NET平台生成更精简的应用程序。
张善友
微软最有价值专家、腾讯云最有价值专家、华为云最有价值专家
深圳市友浩达科技有限公司CEO
本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关服务和支持。
作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。
当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。
我们的联系邮箱是contact@epubit.com.cn。
如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。
如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线投稿(直接访问www.epubit.com/ contribute即可)。
如果您所在学校、培训机构或企业想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。
如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发送给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。
“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。
“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、人工智能、测试、前端、网络技术等。
异步社区
微信服务号
ASP.NET Core MVC对于使用微软平台的Web开发人员来说是一次彻底的转变。它强调清晰的架构、设计模式和可测试性,并且不会试图隐藏Web的工作方式。
本书第一部分旨在介绍MVC开发的基本概念,包括ASP.NET Core MVC中的新功能,并在实践中体验框架的使用方式。
ASP.NET Core MVC是一个来自微软的Web应用程序开发框架,它结合了模型-视图-控制器(MVC)体系结构的有效性和整洁性、敏捷开发的想法和技术,以及.NET平台的最佳部分。在本章中,你将了解微软创建ASP.NET Core MVC的原因,看看它如何与其前身和替代品进行比较。最后,本章将概述ASP.NET Core MVC中的新特性以及本书所涵盖的内容。
最早的ASP.NET是在2002年推出的,当时微软热衷于保护其在传统桌面应用程序开发中的主导地位,并将互联网视为威胁。图1-1说明了当时出现的ASP.NET Web Forms技术栈。
图1-1 ASP.NET Web Forms技术栈
微软试图使用ASP.NET Web Forms将用户界面(User Interface,UI)模拟为服务器端控件对象层,隐藏超文本传输协议HTTP(本身是无状态的)和超文本标记语言HTML(当时许多开发人员对此还不熟悉)。每个控件在请求之间保持自己的状态,在需要时自动渲染为HTML,并将客户端事件(如按钮单击)与服务器端相应的事件处理程序代码相关联。实际上,Web窗体是一个巨大的抽象层,旨在通过Web传递经典的事件驱动的图形用户界面(Graphics User Interface,GUI)。
其思想是使Web开发的体验与开发桌面应用程序一致。开发人员可以基于有状态的用户界面进行考虑,而无须使用一系列独立的HTTP请求和响应。微软可以使Windows桌面开发人员向新型Web应用程序开发领域实现无缝转型。
传统的ASP.NET Web Forms开发从原则上来说曾经很好,但事实证明它更加复杂。
ASP.NET Web Forms并非一无是处,实际上,微软为提高标准合规性和简化开发流程付出了巨大的努力,甚至从原始的ASP.NET MVC框架中获取了一些功能,并将其应用于ASP.NET Web Forms。当你需要快速的结果时,ASP.NET Web Forms表现优异,你可以在一天内拥有一个相当复杂的Web应用程序。但除非你在开发过程中足够小心,否则你会发现你创建的应用程序难以测试和维护。
2007年10月,微软发布了一个基于现有ASP.NET平台的新开发平台,旨在直接回应对ASP.NET Web Forms的批评和竞争平台(如Ruby on Rails)的普及。新平台称为ASP.NET MVC框架,并反映了Web应用程序开发的新兴趋势,如HTML和CSS标准化、REST Web服务、有效的单元测试以及开发人员应该接受HTTP的无状态特性的想法。
支持最初MVC框架的概念现在看起来很自然而且显而易见,但是它们在2007年的.NET Web开发世界中是缺乏的。ASP.NET MVC框架的引入使微软的Web开发平台重新回到了现代。
MVC框架还表明微软的态度发生了重大变化,微软以前曾试图控制Web应用程序工具链中的每个组件。现在微软基于jQuery等开源工具构建了MVC框架,从竞争(并且更为成功的)平台中获得了设计约定和最佳实践,并将源代码发布到MVC框架,供开发人员审查。
微软在创建MVC框架时,基于现有的ASP.NET平台,这是有道理的,因为该平台具有很多固有的底层特性,ASP.NET开发人员都熟知和理解这些特性。
但是,将MVC框架移植到最初为ASP.NET Web Forms设计的平台上是需要妥协的。MVC框架开发人员逐渐喜欢使用配置设置和代码调整,来禁用或重新配置对Web应用程序没有任何影响但对整个程序正常工作来说必需的特性。
随着MVC框架的普及,微软开始将一些核心功能添加到ASP.NET Web Forms中。结果越来越不相匹配,其中需要用来支持MVC框架的独特设计特性被扩展到支持ASP.NET Web Forms,却为了让所有的东西融合在一起而让设计变得更加不相匹配。同时,微软开始使用创建Web服务(Web API)和实时通信(SignalR)的新框架来扩展ASP.NET。新的框架添加了自己的配置和开发约定,每个都有自己的优点和特异之处,结果导致了零乱的混乱状态。
2015年,微软公布了ASP.NET和MVC框架的新方向,也就是本书要讨论的主题ASP.NET Core MVC。
ASP.NET Core基于.NET Core构建,它是.NET Framework的跨平台版本,没有Windows平台特定的应用程序编程接口(Application Programming Interface,API)。虽然Windows仍然是主要的操作系统,但Web应用程序越来越多地托管在云平台的小型而简单的容器中,并且通过采用跨平台方法,微软扩展了.NET的覆盖面,使得ASP.NET Core应用程序能够部署到更广泛的托管环境中。另外,ASP.NET Core还有一个额外的优点——开发人员可以在Linux系统和macOS上创建ASP.NET Core Web应用程序。
ASP.NET Core是一个全新的框架。它更简单、更容易处理,并且没有来自ASP.NET Web Forms的遗留问题。另外,由于它基于.NET Core,因此它支持在一系列平台和容器上进行Web应用程序开发。
ASP.NET Core MVC提供了基于新的ASP.NET Core平台构建的初始ASP.NET MVC框架的功能。它集成了以前由Web API提供的功能,能以更自然的方式生成复杂内容,并且使关键开发任务(如单元测试)更简单。
ASP.NET Core MVC 2的发布版本重点关注整合,它在早期版本中引入了一些工具和平台变更。ASP.NET Core MVC 2需要.NET Core 2,它具有很多扩展的API,现已在其他Linux发行版上受到支持。有用的变化包括一个新的元数据包系统(它简化了NuGet包的管理),一个新的ASP.NET Core配置系统,以及对Entity Framework Core 2的支持。最重要的新功能是Razor Pages,它尝试重新构建应用,并使用更现代的平台创建与Web Pages相关的开发风格,但MVC开发人员对Razor Pages并不感兴趣(因而在本书中没有描述)。
本节将简要介绍新的MVC平台如何克服ASP.NET Web Forms和初始MVC框架的遗留问题,以及如何完善ASP.NET。
ASP.NET Core MVC遵循称为模型-视图-控制器(MVC)的模式,指导ASP.NET Web应用程序及其包含的组件之间的交互。
区分MVC架构模式和ASP.NET Core MVC实现很重要。MVC模式并不新颖,它可以追溯到1978年Xerox PARC的Smalltalk项目,但是它作为Web应用程序的一种开发模式,已经得到了广泛普及,原因如下。
ASP.NET Core MVC实现了MVC模式,与ASP.NET Web Forms相比,ASP.NET Core MVC极大改善了关注点的分离。实际上,ASP.NET Core MVC实现了MVC模式的变体,特别适用于Web应用程序。你将在第3章中更多地了解此架构的理论和实践。
ASP.NET Core和ASP.NET Core MVC已构建为一系列具有明确特征的独立组件,能满足.NET接口的需求,也可构建在抽象基类上。你可以轻松地用自己的实现替换关键组件。一般来说,ASP.NET Core MVC为每个组件提供了以下3个选项。
你将从第14章开始,了解各种组件、如何替换以及为什么要调整或替换每个组件。
ASP.NET Core MVC能够生成清晰、符合标准的标签。它的内置标签帮助器能产生符合标准的输出,但与ASP.NET Web Forms相比,有更重要的理念上的变化。ASP.NET Core MVC并不会生成一些难以控制的HTML控件,而是鼓励你创建简单而优雅的标签,并使用CSS进行样式化。
当然,如果你想要为诸如日期选择器或级联菜单之类的复杂UI元素使用一些现成的小部件,那么ASP.NET Core MVC采用的“无特定要求”方法可以很轻松地使用各种最佳组合的客户端库,如jQuery、Angular或Bootstrap CSS库。ASP.NET Core MVC与这些库相互配合得很好,微软已包含这些模板以启动新的开发项目。
ASP.NET Core MVC与HTTP协调工作。你可以控制在浏览器和服务器之间传递的请求,因此你可以根据需要调整用户体验。使用 Ajax 更加容易,创建 Web 服务来接收浏览器 HTTP 请求是一个简单的过程。
ASP.NET Core MVC架构在使应用程序变得可维护和可测试方面提供了良好的开端,因为你可以将不同的应用程序关注点自然地分离成独立的部分。此外,ASP.NET Core平台和ASP.NET Core MVC框架的每个部分都可以为单元测试进行隔离和替换,可以使用任何流行的开源测试框架(如xUnit)。
在本书中,你将看到如何为ASP.NET MVC控制器编写整洁、简单的单元测试示例。为了模拟各种场景,这些示例使用各种测试和模拟策略来支持框架组件的虚构或模拟实现。即使你以前从来没有写过单元测试,这也是一个很好的开始。
可测试性不仅仅是单元测试的问题。ASP.NET Core MVC应用程序也可以与UI自动化测试工具一起使用。你可以编写模拟用户交互的测试脚本,而不需要猜测框架将生成哪些HTML元素结构、CSS类或ID,你不必担心页面结构发生意外的变化。
统一资源定位器(URL)的风格随着Web应用技术的发展而发展,比如,以下URL越来越少见。
/App_v2/User/Page.aspx?action=show%20prop&prop_id=82742
取而代之的是一种更简单、更干净的格式:
/to-rent/chicago/2303-silver-street
采用这种URL结构有一些很好的理由。第一,搜索引擎会对URL中找到的关键字加权。搜索“rent in Chicago”(芝加哥租房)更有可能找到更简单的网址。第二,许多网络用户现在已经足够了解URL,并乐于通过在浏览器的地址栏中键入导航选项。第三,当人们理解URL的结构时,才更有可能链接它,与朋友分享,甚至通过手机朗读。第四,它不会向公共Internet暴露你的应用程序的技术细节、文件夹和文件名结构,因此你可以自由地更改底层的实现,而不会破坏所有的传入链接。
整洁的URL在早期的框架中很难实现,但ASP.NET Core MVC默认使用称为URL路由的功能来提供整洁的URL。这样可以控制你的URL模式及其与应用程序之间的关系,自由地为用户创建有意义和有用的URL模式,而无须遵守预定义模式。当然,这意味着你可以轻松地定义一种现代REST风格的URL模式。
微软的.NET平台随每个主版本的发展而发展,支持甚至定义了现代编程的最新方向。ASP.NET Core MVC是为.NET Core构建的,因此其API可以充分利用C#程序员熟悉的语言和运行时创新,包括await关键字、扩展方法、lambda表达式、匿名和动态类型以及语言集成查询(LINQ)。
许多ASP.NET Core MVC API方法和编码模式与早期平台相比遵循更整洁、更具表现力的方式。不要担心,如果你尚不了解最新的C#语言特性,第4章会提供MVC开发中最重要的C#特性总结。
以前的ASP.NET版本特定于Windows系统,需要使用Windows桌面编写Web应用程序,使用Windows服务器才能部署和运行它们。微软使ASP.NET Core支持跨平台,包括开发和部署。ASP.NET Core可用于不同的平台,包括macOS和一系列流行的Linux发行版。跨平台支持使得部署ASP.NET Core MVC应用程序变得更加容易,并且可以很好地支持应用程序容器平台,如Docker等。
当前大多数ASP.NET Core MVC开发很可能会使用Visual Studio完成,但微软也创建了一个名为Visual Studio Code的跨平台开发工具,这意味着ASP.NET Core MVC开发不再局限于Windows平台。
与以前的Microsoft Web开发平台不同,你可以免费下载ASP.NET Core和ASP.NET Core MVC的源代码,甚至修改和编译自己的版本。当你要调试跟踪进入一个系统组件并希望进入其代码内部(甚至阅读原始的程序员注释)时,这是非常有价值的。如果你正在构建一个高级组件,并希望了解进一步开发的可能性,或想了解内置组件如何进行实际工作,这也是非常有用的。
你可以从GitHub下载ASP.NET Core和ASP.NET Core MVC的源代码。
为了充分利用本书,你应该熟悉Web开发的基础知识,了解HTML和CSS的工作原理,并掌握C#的相关知识。如果你对客户端细节(如JavaScript)有些模糊,请不要担心。重点是本书中的服务器端开发,你可以通过示例获取所需的内容。第4章将总结MVC开发中最有用的C#语言特性,如果你正在从早期版本转到最新的.NET版本,你将发现它们非常有用。
本书分为两部分,每一部分都涵盖了一系列相关主题。
本书第一部分将从ASP.NET Core MVC的背景开始,解释MVC模式的优点和实际影响,介绍ASP.NET Core MVC的功能,并描述每个ASP.NET Core MVC程序员需要学习的工具和C#语言功能。
在第2章中,你将通过创建一个简单的Web应用程序,深入了解主要组件、构建块以及它们如何组合在一起。然而,本书第一部分主要介绍如何开发一个名为SportsStore的项目,通过该项目,展示从开始到部署的实际开发流程,并介绍ASP.NET Core MVC的主要特性。
本书第二部分将解释用于构建SportsStore应用程序的ASP.NET Core MVC功能的内部工作原理。该部分将展示每个功能如何工作,解释它所扮演的角色,并展示可用的配置和自定义选项。本书第一部分介绍广泛的背景基础,第二部分则深入讨论细节。
在GitHub网站上搜索“pro-asp.net-core-mvc-2”,即可下载本书所有章节的示例代码。下载的内容不需要修改,并包含所有必要的资源。
如果你在使用本书的示例代码时遇到问题,或者如果你在本书中发现问题,你可以通过电子邮件adam@adam- freeman.com联系作者,作者会尽力帮助你。
本章介绍了ASP.NET Core MVC的背景以及它是如何从ASP.NET Web Forms和起始的ASP.NET MVC框架发展而来的,阐述了使用ASP.NET Core MVC的好处以及本书的结构。在下一章中,你将在一个简单的示例程序中看到ASP.NET Core MVC先进的特性。