龙空技术网

这本694页的程序员砖头书让你精通ASP.NET Core MVC

程序员荐书 313

前言:

此刻姐妹们对“net后端开发推荐书籍”大约比较重视,朋友们都需要知道一些“net后端开发推荐书籍”的相关知识。那么小编也在网络上网罗了一些有关“net后端开发推荐书籍””的相关资讯,希望大家能喜欢,同学们一起来了解一下吧!

ASP.NET Core MVC是一个来自微软的Web应用程序开发框架,它结合了模型-视图-控制器(MVC)体系结构的有效性和整洁性、敏捷开发的想法和技术,以及.NET平台的最佳部分。

1.1 ASP.NET Core MVC的历史

最早的ASP.NET是在2002年推出的,当时微软热衷于保护其在传统桌面应用程序开发中的主导地位,并将互联网视为威胁。图1-1说明了当时出现的ASP.NET Web Forms技术栈。

图1-1 ASP.NET Web Forms技术栈

1.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开发从原则上来说曾经很好,但事实证明它更加复杂。

View State权重:跨请求维护状态的实际机制(称为“View State”)导致在客户端和服务器之间传输大量数据。即使是大小适中的Web应用程序,这些数据也可能会达到几百千字节,并且每次请求都会来回传递数据,从而导致响应时间更慢,并增加了服务器的带宽需求。页面生命周期:连接客户端事件与服务器端事件处理程序代码(页面生命周期的一部分)的机制可能会变得复杂和棘手。很少有开发人员在不产生View State错误或发现某些事件处理程序莫名失败的情况下,能在运行时成功操纵控件层。关注点分离的错误理念:ASP.NET Web Forms的代码隐藏模型提供了将应用程序代码从HTML标记中移除到单独的代码隐藏类中的方法。这是为了分离逻辑层和表现层,但实际上,又鼓励开发人员将表现层代码(如操纵服务器端控件树)与其应用程序逻辑(如操纵数据库数据)混在这些怪异的后台代码类中。最终的结果可能是难以理解的。对HTML的有限控制:服务器控件将其自身呈现为HTML,但不一定是你想要的HTML。在ASP.NET的早期版本中,HTML输出无法符合Web标准,或者不能很好地利用层叠样式表(CSS),并且服务器控件生成难以预测且复杂的ID属性,这些属性难以使用JavaScript访问。这些问题在最近的ASP.NET Web Forms版本中有所改进,但是获取你期望的HTML仍然是比较困难的。有漏洞的抽象:ASP.NET Web Forms尽可能隐藏HTML和HTTP。当你尝试实现自定义行为时,你经常会放弃抽象,这迫使你对回发事件机制进行逆向工程,或执行笨拙的操作以使其生成所需的HTML。低可测试性:ASP.NET Web Forms的设计人员无法预料到自动测试将成为软件开发的重要组成部分。他们设计的紧密耦合架构不适合单元测试。集成测试也可能是一个挑战。

ASP.NET Web Forms并非一无是处,实际上,微软为提高标准合规性和简化开发流程付出了巨大的努力,甚至从原始的ASP.NET MVC框架中获取了一些功能,并将其应用于ASP.NET Web Forms。当你需要快速的结果时,ASP.NET Web Forms表现优异,你可以在一天内拥有一个相当复杂的Web应用程序。但除非你在开发过程中足够小心,否则你会发现你创建的应用程序难以测试和维护。

1.1.2 起初的MVC框架

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框架存在的问题

微软在创建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。新的框架添加了自己的配置和开发约定,每个都有自己的优点和特异之处,结果导致了零乱的混乱状态。

1.2 ASP.NET Core

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提供的功能,能以更自然的方式生成复杂内容,并且使关键开发任务(如单元测试)更简单。

1.2.1 ASP.NET Core MVC 2的新特性

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并不感兴趣(因而在本书中没有描述)。

1.2.2 ASP.NET Core MVC的主要优点

本节将简要介绍新的MVC平台如何克服ASP.NET Web Forms和初始MVC框架的遗留问题,以及如何完善ASP.NET。

1.MVC架构

ASP.NET Core MVC遵循称为模型-视图-控制器(MVC)的模式,指导ASP.NET Web应用程序及其包含的组件之间的交互。

区分MVC架构模式和ASP.NET Core MVC实现很重要。MVC模式并不新颖,它可以追溯到1978年Xerox PARC的Smalltalk项目,但是它作为Web应用程序的一种开发模式,已经得到了广泛普及,原因如下。

用户与遵守MVC模式的应用程序进行交互是遵循自然循环的。用户执行一个动作,应用程序进行响应,更改其数据模型并向用户传递更新的视图。然后重复这一循环。这对作为一系列HTTP请求和响应来传输的Web应用程序来说非常合适。Web应用程序需要组合几种技术(例如数据库、HTML和可执行代码等),通常分为一系列层次。这些组合产生的模式会自然地映射到MVC模式的概念上。

ASP.NET Core MVC实现了MVC模式,与ASP.NET Web Forms相比,ASP.NET Core MVC极大改善了关注点的分离。实际上,ASP.NET Core MVC实现了MVC模式的变体,特别适用于Web应用程序。你将在第3章中更多地了解此架构的理论和实践。

2.可扩展性

ASP.NET Core和ASP.NET Core MVC已构建为一系列具有明确特征的独立组件,能满足.NET接口的需求,也可构建在抽象基类上。你可以轻松地用自己的实现替换关键组件。一般来说,ASP.NET Core MVC为每个组件提供了以下3个选项。

使用组件的默认实现(对于大多数应用程序来说应该是足够的)。从默认实现派生一个子类来调整其行为。使用接口或抽象基类的新实现完全替换组件。

你将从第14章开始,了解各种组件、如何替换以及为什么要调整或替换每个组件。

3.严格控制HTML和HTTP

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 请求是一个简单的过程。

4.可测试性

ASP.NET Core MVC架构在使应用程序变得可维护和可测试方面提供了良好的开端,因为你可以将不同的应用程序关注点自然地分离成独立的部分。此外,ASP.NET Core平台和ASP.NET Core MVC框架的每个部分都可以为单元测试进行隔离和替换,可以使用任何流行的开源测试框架(如xUnit)。

在本书中,你将看到如何为ASP.NET MVC控制器编写整洁、简单的单元测试示例。为了模拟各种场景,这些示例使用各种测试和模拟策略来支持框架组件的虚构或模拟实现。即使你以前从来没有写过单元测试,这也是一个很好的开始。

可测试性不仅仅是单元测试的问题。ASP.NET Core MVC应用程序也可以与UI自动化测试工具一起使用。你可以编写模拟用户交互的测试脚本,而不需要猜测框架将生成哪些HTML元素结构、CSS类或ID,你不必担心页面结构发生意外的变化。

5.强大的路由系统

统一资源定位器(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模式。

6.现代API

微软的.NET平台随每个主版本的发展而发展,支持甚至定义了现代编程的最新方向。ASP.NET Core MVC是为.NET Core构建的,因此其API可以充分利用C#程序员熟悉的语言和运行时创新,包括await关键字、扩展方法、lambda表达式、匿名和动态类型以及语言集成查询(LINQ)。

许多ASP.NET Core MVC API方法和编码模式与早期平台相比遵循更整洁、更具表现力的方式。不要担心,如果你尚不了解最新的C#语言特性,第4章会提供MVC开发中最重要的C#特性总结。

7.跨平台

以前的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平台。

8.ASP.NET Core MVC是开源的

与以前的Microsoft Web开发平台不同,你可以免费下载ASP.NET Core和ASP.NET Core MVC的源代码,甚至修改和编译自己的版本。当你要调试跟踪进入一个系统组件并希望进入其代码内部(甚至阅读原始的程序员注释)时,这是非常有价值的。如果你正在构建一个高级组件,并希望了解进一步开发的可能性,或想了解内置组件如何进行实际工作,这也是非常有用的。

精通ASP.NET Core MVC 第7版

畅销书升级版,新增大量内容,详细介绍ASP.NETCoreMVC的功能讲述开发可扩展的Web应用程序的工具和技术,助力你ASP.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功能的内部工作原理。该部分将展示每个功能如何工作,解释它所扮演的角色,并展示可用的配置和自定义选项。本书第一部分介绍广泛的背景基础,第二部分则深入讨论细节。

作者简介

Adam Freeman是一位经验丰富的IT专家,曾在一系列公司担任高级职务,最后的职务是一家全球性银行的首席技术官(Chief Technology Officer,CTO)和首席运营官(Chief Operating Officer,COO)。退休以后,他喜欢写作和长跑。

详细目录

目  录

第 一部分 ASP.NET Core MVC

第 1章 ASP.NET Core MVC背景 2

1.1 ASP.NET Core MVC的历史 2

1.1.1 ASP.NET Web Forms 2

1.1.2 起初的MVC框架 3

1.2 ASP.NET Core 3

1.2.1 ASP.NET Core MVC 2的新特性 4

1.2.2 ASP.NET Core MVC的主要优点 4

1.3 预备知识 6

1.4 本书的结构 6

1.5 如何获取本书的示例代码 6

1.6 联系作者 6

1.7 小结 7

第 2章 首个MVC应用程序 8

2.1 安装Visual Studio 8

2.2 安装.NET Core 2.0 SDK 9

2.3 创建新的ASP.NET Core MVC项目 9

2.3.1 添加控制器 11

2.3.2 理解路由 13

2.4 渲染页面 14

2.4.1 创建并渲染视图 14

2.4.2 添加动态输出 16

2.5 创建一个简单的数据录入程序 17

2.5.1 设置场景 17

2.5.2 设计数据模型 18

2.5.3 创建第二个操作和强类型视图 18

2.5.4 链接操作方法 19

2.5.5 建立表单 20

2.5.6 接收表单数据 21

2.5.7 显示响应 25

2.5.8 添加验证 27

2.5.9 设置内容样式 31

2.6 小结 35

第3章 MVC模式、项目与约定 36

3.1 MVC简史 36

3.2 MVC模式 36

3.2.1 模型 36

3.2.2 控制器 37

3.2.3 视图 37

3.2.4 MVC的ASP.NET实现 37

3.3 MVC与其他模式的比较 38

3.3.1 “智能UI”模式 38

3.3.2 理解模型-视图架构 39

3.3.3 经典的3层架构 39

3.3.4 MVC的多样性 40

3.4 ASP.NET Core MVC项目 40

3.4.1 创建项目 41

3.4.2 关于MVC的约定 43

3.5 小结 44

第4章 C#基本特性 45

4.1 准备示例项目 45

4.1.1 启用ASP.NET Core MVC 46

4.1.2 创建MVC应用程序组件 47

4.2 运用null条件运算符 48

4.2.1 null条件运算符的连接运算 49

4.2.2 联合使用null条件运算符和

null合并运算符 50

4.3 使用自动实现属性 51

4.3.1 初始化自动实现属性 51

4.3.2 创建只读的自动实现属性 52

4.4 使用字符串插值 53

4.5 使用对象和集合初始化器 54

4.6 模式匹配 56

4.7 使用扩展方法 58

4.7.1 将扩展方法应用于接口 59

4.7.2 创建过滤扩展方法 60

4.8 使用Lambda表达式 61

4.8.1 定义函数 63

4.8.2 使用Lambda表达式实现方法和

属性 65

4.9 使用类型推断和匿名类型 66

4.10 使用异步方法 68

4.10.1 直接使用任务 69

4.10.2 使用async和await关键字 70

4.11 获取名称 71

4.12 小结 72

第5章 使用Razor 73

5.1 准备示例项目 73

5.1.1 定义模型 74

5.1.2 创建控制器 74

5.1.3 创建视图 75

5.2 使用模型对象 75

5.3 使用布局 78

5.3.1 创建布局 78

5.3.2 使用布局 80

5.3.3 应用视图启动文件 80

5.4 使用Razor表达式 81

5.4.1 插入数据 82

5.4.2 设置属性值 83

5.4.3 使用条件语句 84

5.4.4 枚举数组和集合 85

5.5 小结 86

第6章 使用Visual Studio 87

6.1 准备示例项目 87

6.1.1 创建模型 87

6.1.2 创建控制器和视图 88

6.2 管理软件包 89

6.2.1 NuGet 89

6.2.2 Bower 91

6.3 迭代开发 93

6.3.1 修改Razor视图 93

6.3.2 对C#类进行更改 94

6.3.3 使用浏览器链接 99

6.4 部署JavaScript和CSS 102

6.4.1 启用静态内容传递 102

6.4.2 为项目添加静态内容 103

6.4.3 更新视图 104

6.4.4 MVC应用程序中的打包和

缩小 105

6.5 小结 108

第7章 对MVC应用程序进行

单元测试 109

7.1 准备示例项目 109

7.1.1 启用内置的标签助手 109

7.1.2 为控制器添加操作方法 110

7.1.3 创建数据输入表单 110

7.1.4 更新Index视图 111

7.2 测试MVC应用程序 112

7.2.1 创建单元测试项目 112

7.2.2 创建项目引用 113

7.2.3 编写并运行单元测试 115

7.2.4 隔离组件以进行单元测试 116

7.3 改进单元测试 123

7.3.1 参数化单元测试 123

7.3.2 改进假的实现 126

7.4 小结 129

第8章 SportsStore应用程序 130

8.1 准备开始 130

8.1.1 创建MVC项目 130

8.1.2 创建单元测试项目 133

8.1.3 测试和启动应用程序 134

8.2 开始领域模型开发 134

8.2.1 创建存储库 135

8.2.2 创建虚拟存储库 135

8.2.3 注册存储库服务 136

8.3 显示产品清单 137

8.3.1 添加一个控制器 137

8.3.2 添加并配置视图 138

8.3.3 设置默认路由 139

8.3.4 运行应用程序 140

8.4 准备数据库 140

8.4.1 安装Entity Framework Core

工具包 141

8.4.2 创建数据库类 141

8.4.3 创建存储库类 142

8.4.4 定义连接字符串 142

8.4.5 配置应用程序 143

8.4.6 创建数据库迁移 145

8.4.7 创建种子数据 145

8.5 添加分页 148

8.5.1 显示页面链接 149

8.5.2 改进URL 155

8.6 更改内容样式 157

8.6.1 安装Bootstrap包 157

8.6.2 将Bootstrap样式应用于布局 157

8.6.3 创建分部视图 159

8.7 小结 160

第9章 SportsStore的导航 161

9.1 添加导航控件 161

9.1.1 过滤产品列表 161

9.1.2 优化URL结构 164

9.1.3 构建类别导航菜单 167

9.1.4 更正页数 172

9.2 构建购物车 174

9.2.1 定义购物车模型 174

9.2.2 添加Add To Cart按钮 177

9.2.3 启用会话 179

9.2.4 实现Cart控制器 180

9.2.5 显示购物车的内容 181

9.3 小结 183

第 10章 完成购物车 184

10.1 使用服务优化购物车模型 184

10.1.1 创建支持存储感知的Cart类 184

10.1.2 注册服务 185

10.1.3 简化Cart控制器 185

10.2 完成购物车功能 186

10.2.1 从购物车中删除商品 186

10.2.2 添加购物车摘要小部件 188

10.3 提交订单 190

10.3.1 创建模型类 190

10.3.2 添加结账流程 191

10.3.3 实现订单处理 193

10.3.4 完成Order控制器 195

10.3.5 显示验证错误 198

10.3.6 显示摘要页面 199

10.4 小结 199

第 11章 SportsStore的管理 200

11.1 管理订单 200

11.1.1 增强模型 200

11.1.2 添加操作方法和视图 201

11.2 添加目录管理 203

11.2.1 创建CRUD控制器 203

11.2.2 实现列表视图 205

11.2.3 编辑商品 206

11.2.4 创建新的商品 216

11.2.5 删除商品 217

11.3 小结 220

第 12章 SportsStore的安全和部署 221

12.1 保护管理功能 221

12.1.1 创建身份标识数据库 221

12.1.2 应用基本授权策略 224

12.1.3 创建账户控制器和视图 226

12.1.4 测试安全策略 229

12.2 部署应用程序 229

12.2.1 创建数据库 230

12.2.2 准备应用程序 231

12.2.3 应用数据库迁移 234

12.2.4 管理数据库填充 234

12.2.5 部署应用程序 237

12.3 小结 239

第 13章 使用Visual Studio Code 240

13.1 设置开发环境 240

13.1.1 安装Node.js 240

13.1.2 检查Node.js安装状态 241

13.1.3 安装Git 241

13.1.4 检查Git安装状态 241

13.1.5 安装Bower 241

13.1.6 安装.NET Core 242

13.1.7 检查.NET Core安装状态 242

13.1.8 安装Visual Studio Code 242

13.1.9 检查Visual Studio Code安装

状态 243

13.1.10 安装Visual Studio Code的

C#扩展 243

13.2 创建ASP.NET Code项目 244

13.3 使用Visual Studio Code准备项目 244

13.3.1 管理客户端软件包 245

13.3.2 配置应用程序 246

13.3.3 构建和运行项目 246

13.4 重新创建PartyInvites应用程序 246

13.4.1 创建模型和存储库 247

13.4.2 创建数据库 249

13.4.3 创建控制器和视图 250

13.5 Visual Studio Code中的单元测试 254

13.5.1 创建单元测试 254

13.5.2 运行测试 255

13.6 小结 255

第二部分 ASP.NET Core MVC详解

第 14章 配置应用程序 257

14.1 准备示例项目 257

14.2 配置项目 259

14.2.1 将包添加到项目中 259

14.2.2 将工具包添加到项目中 261

14.3 理解Program类 261

14.4 了解Startup类 264

14.4.1 了解ASP.NET服务 266

14.4.2 了解ASP.NET中间件 268

14.4.3 了解如何调用Configure方法 275

14.4.4 添加其他中间件 278

14.5 配置应用程序 281

14.5.1 创建JSON配置文件 283

14.5.2 使用配置数据 284

14.5.3 配置日志记录 285

14.5.4 配置依赖注入 288

14.6 配置MVC服务 289

14.7 处理复杂配置 290

14.7.1 创建不同的外部配置文件 290

14.7.2 创建不同的配置方法 292

14.7.3 创建不同的配置类 293

14.8 小结 294

第 15章 URL路由 295

15.1 准备示例项目 295

15.1.1 创建模型类 296

15.1.2 创建Example控制器 296

15.1.3 创建视图 298

15.2 介绍URL模式 299

15.3 创建和注册简单路由 299

15.4 定义默认值 300

15.5 使用静态URL片段 303

15.6 定义自定义片段变量 306

15.6.1 使用自定义片段变量作为

操作方法的参数 308

15.6.2 定义可选的URL片段 309

15.6.3 定义可变长度路由 311

15.7 约束路由 312

15.7.1 使用正则表达式约束路由 314

15.7.2 使用类型和值约束 316

15.7.3 组合约束 316

15.7.4 定义自定义约束 318

15.8 使用特性路由 320

15.8.1 准备特性路由 320

15.8.2 应用特性路由 321

15.8.3 应用路由约束 323

15.9 小结 323

第 16章 高级路由特性 324

16.1 准备示例项目 324

16.2 在视图中生成传出的URL 325

16.2.1 创建传出的链接 326

16.2.2 创建非链接的URL 333

16.3 自定义路由系统 334

16.3.1 更改路由系统配置 335

16.3.2 创建自定义路由类 336

16.4 使用区域 344

16.4.1 创建区域 344

16.4.2 创建区域路由 345

16.4.3 填充区域 346

16.4.4 生成区域中指向操作的链接 347

16.5 URL模式最佳实践 348

16.5.1 保持URL的整洁性 348

16.5.2 GET方法和POST方法:

选择最合适的方法 349

16.6 小结 349

第 17章 控制器和操作 350

17.1 准备示例项目 350

17.2 理解控制器 353

17.3 创建控制器 353

17.3.1 创建POCO控制器 353

17.3.2 使用控制器基类 355

17.4 接收上下文数据 355

17.4.1 从Context对象中接收数据 356

17.4.2 使用操作方法参数 359

17.5 生成响应 360

17.5.1 使用Context对象生成响应 360

17.5.2 理解操作结果 361

17.5.3 生成HTML响应 362

17.5.4 执行重定向 369

17.5.5 返回不同类型的内容 374

17.5.6 响应文件的内容 376

17.5.7 返回错误和HTTP状态码 377

17.5.8 理解其他操作结果类 378

17.6 小结 378

第 18章 依赖注入 379

18.1 准备示例项目 379

18.1.1 创建模型和存储库 380

18.1.2 创建控制器和视图 381

18.1.3 创建单元测试项目 383

18.2 创建松散耦合的组件 383

18.3 ASP.NET的依赖注入 387

18.3.1 准备依赖注入 388

18.3.2 配置服务提供者 389

18.3.3 对具有依赖项的控制器进行

单元测试 390

18.3.4 使用依赖关系链 390

18.3.5 对具体类型使用依赖注入 393

18.4 服务的生命周期 394

18.4.1 使用瞬态生命周期 395

18.4.2 使用作用域的生命周期 398

18.4.3 使用单例生命周期 399

18.5 使用操作注入 400

18.6 使用属性注入特性 401

18.7 手动请求实现对象 401

18.8 小结 402

第 19章 过滤器 403

19.1 准备示例项目 403

19.1.1 启用SSL 404

19.1.2 创建控制器和视图 404

19.2 使用过滤器 405

19.3 实现过滤器 408

19.4 使用授权过滤器 409

19.5 使用操作过滤器 412

19.5.1 创建操作过滤器 412

19.5.2 创建异步操作过滤器 414

19.6 使用结果过滤器 414

19.6.1 创建结果过滤器 415

19.6.2 创建异步结果过滤器 416

19.6.3 创建混合操作/结果过滤器 417

19.7 使用异常过滤器 419

19.8 为过滤器使用依赖注入 421

19.8.1 解决过滤器依赖项 421

19.8.2 管理过滤器的生命周期 424

19.9 创建全局过滤器 426

19.10 理解和更改过滤器的执行顺序 428

19.11 小结 430

第 20章 API控制器 431

20.1 准备示例项目 431

20.1.1 创建模型和存储库 431

20.1.2 创建控制器和视图 433

20.2 REST控制器的作用 435

20.2.1 速度问题 435

20.2.2 效率问题 436

20.2.3 开放性问题 436

20.3 REST和API控制器 436

20.3.1 创建API控制器 437

20.3.2 测试API控制器 440

20.3.3 在浏览器中使用API控制器 443

20.4 内容格式 445

20.4.1 默认内容策略 445

20.4.2 内容协商 446

20.4.3 指定action数据格式 448

20.4.4 从路由或查询字符串获取

数据格式 449

20.4.5 启用完成内容协商 450

20.4.6 接收不同的数据格式 451

20.5 小结 452

第 21章 视图 453

21.1 准备示例项目 453

21.2 创建自定义视图引擎 454

21.2.1 创建自定义IView 456

21.2.2 创建IViewEngine实现 456

21.2.3 注册自定义视图引擎 457

21.2.4 测试视图引擎 458

21.3 使用Razor引擎 459

21.3.1 准备示例项目 459

21.3.2 Razor视图 461

21.4 将动态内容添加到Razor视图中 463

21.4.1 使用布局部分 464

21.4.2 使用分部视图 468

21.4.3 将JSON内容添加到视图中 469

21.5 配置Razor 471

21.6 小结 475

第 22章 视图组件 476

22.1 准备示例项目 476

22.1.1 创建模型和存储库 476

22.1.2 创建控制器和视图 478

22.1.3 配置应用程序 480

22.2 视图组件 481

22.3 创建视图组件 481

22.3.1 创建POCO视图组件 482

22.3.2 从ViewComponent基类派生 483

22.3.3 视图组件结果 484

22.3.4 获取上下文数据 487

22.3.5 创建异步视图组件 491

22.4 创建混合的控制器/视图组件类 493

22.4.1 创建混合视图 493

22.4.2 应用混合类 495

22.5 小结 495

第 23章 标签助手 496

23.1 准备示例项目 496

23.1.1 创建模型和存储库 496

23.1.2 创建控制器、布局与视图 497

23.1.3 配置应用程序 499

23.2 创建标签助手 500

23.2.1 定义标签助手类 501

23.2.2 注册标签助手 503

23.2.3 使用标签助手 503

23.2.4 管理标签助手的作用域 505

23.3 高级标签助手特性 508

23.3.1 创建缩写元素 508

23.3.2 前置和追加内容与元素 510

23.3.3 使用依赖注入获取视图

上下文数据 512

23.3.4 使用视图模型 514

23.3.5 协调标签助手 516

23.3.6 抑制输出元素 517

23.4 小结 518

第 24章 使用表单标签助手 519

24.1 准备示例项目 519

24.2 使用form元素 521

24.2.1 设置form目标 521

24.2.2 使用防伪特性 522

24.3 使用input元素 524

24.3.1 配置input元素 524

24.3.2 格式化数据 526

24.4 使用label元素 528

24.5 使用select和option元素 529

24.5.1 使用数据源填充select元素 530

24.5.2 从枚举中生成option元素 531

24.6 使用textarea元素 535

24.7 验证表单标签助手 536

24.8 小结 536

第 25章 使用其他内置标签助手 537

25.1 准备示例项目 537

25.2 使用宿主环境标签助手 538

25.3 使用JavaScript和CSS标签助手 539

25.3.1 管理JavaScript文件 539

25.3.2 管理CSS样式表 545

25.4 使用超链接元素 547

25.5 使用图像元素 548

25.6 使用数据缓存 549

25.6.1 设置缓存过期时间 551

25.6.2 使用缓存变体 552

25.7 小结 555

第 26章 模型绑定 556

26.1 准备示例项目 556

26.1.1 创建模型和存储库 556

26.1.2 创建控制器和视图 558

26.1.3 配置应用 559

26.2 理解模型绑定 560

26.2.1 默认绑定值 561

26.2.2 绑定简单值 562

26.2.3 绑定复杂类型 562

26.2.4 绑定数组和集合 570

26.3 指定模型绑定源 575

26.3.1 选择标准绑定源 576

26.3.2 使用请求头作为绑定源 577

26.3.3 使用请求体作为绑定源 579

26.4 小结 581

第 27章 模型验证 582

27.1 准备示例项目 582

27.1.1 创建模型 583

27.1.2 创建控制器 583

27.1.3 创建布局和视图 584

27.2 理解模型验证的需求 586

27.3 显式地验证模型 586

27.3.1 为用户显示验证错误消息 588

27.3.2 显示验证消息 589

27.3.3 显示属性级验证消息 592

27.3.4 显示模型级验证消息 593

27.4 使用元数据指定验证规则 595

27.5 执行客户端验证 599

27.6 执行远程验证 601

27.7 小结 603

第 28章 ASP.NET Core Identity

入门 604

28.1 准备示例项目 604

28.2 设置ASP.NET Core Identity 607

28.2.1 创建用户类 607

28.2.2 创建数据库上下文类 608

28.2.3 配置数据库连接串 608

28.2.4 创建ASP.NET Core Identity

数据库 610

28.3 使用ASP.NET Core Identity 610

28.3.1 列举用户账户 610

28.3.2 创建用户 612

28.3.3 验证密码 615

28.3.4 验证用户详情 620

28.4 完成管理功能 624

28.4.1 实现删除功能 625

28.4.2 实现编辑功能 626

28.5 小结 629

第 29章 应用ASP.NET Core

Identity 630

29.1 准备示例项目 630

29.2 验证用户 630

29.2.1 准备实现验证 632

29.2.2 添加用户验证 634

29.2.3 测试验证 636

29.3 使用角色授权用户 636

29.3.1 创建与删除角色 637

29.3.2 管理角色成员 641

29.3.3 使用角色进行授权 644

29.4 播种数据库 647

29.5 小结 650

第30章 ASP.NET Core Identity

进阶 651

30.1 准备示例项目 651

30.2 添加自定义用户属性 652

30.2.1 准备数据库迁移 654

30.2.2 测试自定义属性 655

30.3 使用声明和策略 655

30.3.1 声明 656

30.3.2 创建声明 659

30.3.3 使用策略 661

30.3.4 使用策略对资源授权访问 666

30.4 使用第三方验证 670

30.4.1 注册Google应用 670

30.4.2 启用Google验证 671

30.5 小结 674

第31章 模型约定与操作约束 675

31.1 准备示例项目 675

31.2 使用应用程序模型和模型约定 677

31.2.1 理解应用程序模型 678

31.2.2 理解模型约定角色 680

31.2.3 创建模型约定 680

31.2.4 理解模型约定的执行顺序 684

31.2.5 创建全局模型约定 685

31.3 使用操作约束 686

31.3.1 准备示例项目 687

31.3.2 操作约束的作用 688

31.3.3 创建操作约束 689

31.3.4 在操作约束中处理依赖 692

31.4 小结 694

标签: #net后端开发推荐书籍 #jquery142vsdoc