![]()
内容推荐 Microsoft MVP Dino Esposito教会你如何: ◆ 创建新项目并理解其结构 ◆ 在ASP.NET Core中设置和使用熟悉的MVC应用程序模型 ◆ 编写控制器类代码来控制请求处理的所有阶段 ◆ 从控制器提供HTML,或者直接通过Razor页面提供HTML ◆ 掌握Razor语言,以快速定义HTML视图的布局 ◆ 管理跨领域关注点,如全局配置数据、错误和异常处理、控制器类的设计以及依赖注入 ◆ 使用用户身份验证和ASP.NET Core的基于策略的用户授权API来保护应用程序安全 ◆ 设计高效的数据访问,并为读写数据选择合适的选项 ◆ 构建ASP.NET Core Web API来返回JSON、XML或其他数据 ◆ 使用数据绑定,以编程方式更新可视化组件 ◆ 为iOS和Android构建对设备友好的Web视图 ◆ 探讨全新的ASP.NET Core运行时环境和依赖注入(DI)基础设施 目录 第I部分 新ASP.NET一览 第1章 为什么又开发一个ASP.NET 3 1.1 .NET平台现状 4 1.1.1 .NET平台的亮点 4 1.1.2 .NET Framework 4 1.1.3 ASP.NET Framework 5 1.1.4 Web API框架 6 1.1.5 对极简Web服务的需求 7 1.2 15年过去后的.NET 7 1.2.1 更简洁的.NET Framework 8 1.2.2 将ASP.NET与宿主解耦 9 1.2.3 新的ASP.NET Core 10 1.3 .NET Core的命令行工具 10 1.3.1 安装CLI工具 10 1.3.2 dotnet驱动程序工具 11 1.3.3 dotnet的预定义命令 12 1.4 小结 13 第2章 第一个ASP.NET Core项目 15 2.1 ASP.NET Core项目的分析 15 2.1.1 项目结构 16 2.1.2 与运行时环境交互 22 2.2 依赖注入子系统 27 2.2.1 依赖注入一览 27 2.2.2 ASP.NET Core中的依赖注入 29 2.2.3 与外部DI库集成 31 2.3 构建极简网站 33 2.3.1 创建单端点网站 34 2.3.2 访问Web服务器上的文件 40 2.4 小结 44 第II部分 ASP.NET MVC应用程序模型 第3章 启动ASP.NET MVC 47 3.1 启用MVC应用程序模型 47 3.1.1 注册MVC服务 48 3.1.2 启用传统路由 50 3.2 配置路由表 53 3.2.1 路由的剖析 54 3.2.2 路由的高级方面 59 3.3 ASP.NET MVC的机制 62 3.3.1 操作调用程序 63 3.3.2 处理操作结果 64 3.3.3 操作筛选器 64 3.4 小结 65 第4章 ASP.NET MVC控制器 67 4.1 控制器类 67 4.1.1 发现控制器的名称 68 4.1.2 继承的控制器 69 4.1.3 POCO控制器 70 4.2 控制器操作 73 4.2.1 将操作映射到方法 73 4.2.2 基于特性的路由 77 4.3 实现操作方法 80 4.3.1 基本数据获取 80 4.3.2 模型绑定 82 4.3.3 操作结果 88 4.4 操作筛选器 91 4.4.1 操作筛选器的剖析 91 4.4.2 操作筛选器的小集合 94 4.5 小结 97 第5章 ASP.NET MVC视图 99 5.1 提供HTML内容 99 5.1.1 从终止中间件提供HTML 100 5.1.2 从控制器提供HTML 100 5.1.3 从Razor页面提供HTML 101 5.2 视图引擎 102 5.2.1 调用视图引擎 102 5.2.2 Razor视图引擎 103 5.2.3 添加自定义视图引擎 108 5.2.4 Razor视图的结构 109 5.3 向视图传递数据 113 5.3.1 内置的字典 113 5.3.2 强类型视图模型 116 5.3.3 通过DI系统注入数据 118 5.4 Razor页面 118 5.4.1 引入Razor页面的理由 118 5.4.2 Razor页面的实现 119 5.4.3 从Razor页面提交数据 120 5.5 小结 122 第6章 Razor语法 123 6.1 语法元素 123 6.1.1 处理代码表达式 124 6.1.2 布局模板 128 6.1.3 分部视图 131 6.2 Razor标记帮助程序 133 6.2.1 使用标记帮助程序 133 6.2.2 内置的标记帮助程序 135 6.2.3 编写自定义标记帮助程序 138 6.3 Razor视图组件 141 6.3.1 编写视图组件 142 6.3.2 Composition UI模式 143 6.4 小结 145 第III部分 跨领域关注点 第7章 设计考虑 149 7.1 依赖注入基础结构 149 7.1.1 进行重构以隔离依赖 149 7.1.2 ASP.NET Core DI系统概述 152 7.1.3 DI容器的各个方面 155 7.1.4 在层中注入数据和服务 156 7.2 收集配置数据 157 7.2.1 支持的数据提供程序 158 7.2.2 构建配置文档对象模型 160 7.2.3 传递配置数据 162 7.3 分层架构 164 7.3.1 表示层 165 7.3.2 应用层 167 7.3.3 领域层 167 7.3.4 基础结构层 168 7.4 处理异常 168 7.4.1 异常处理中间件 168 7.4.2 异常筛选器 171 7.4.3 记录异常 173 7.5 小结 174 第8章 应用程序安全 175 8.1 Web安全基础结构 175 8.1.1 HTTPS协议 175 8.1.2 处理安全证书 176 8.1.3 对HTTPS应用加密 176 8.2 ASP.NET Core中的身份验证 176 8.2.1 基于cookie的身份验证 177 8.2.2 处理多个身份验证方案 179 8.2.3 建模用户身份 180 8.2.4 外部身份验证 184 8.3 通过ASP.NET Identity进行用户身份验证 189 8.3.1 ASP.NET Identity概述 189 8.3.2 使用User Manager 193 8.4 授权策略 197 8.4.1 基于角色的授权 198 8.4.2 基于策略的授权 201 8.5 小结 206 第9章 访问应用程序数据 207 9.1 创建相对通用的应用程序后端 208 9.1.1 整体式应用程序 208 9.1.2 CQRS方法 210 9.1.3 基础结构层的构成 211 9.2 .NET Core中的数据访问 212 9.2.1 Entity Framework 6.x 213 9.2.2 ADO.NET适配器 215 9.2.3 使用微型O/RM框架 217 9.2.4 使用NoSQL存储 219 9.3 EF Core的常见任务 220 9.3.1 建模数据库 221 9.3.2 处理表数据 224 9.3.3 处理事务 229 9.3.4 关于异步数据处理 231 9.4 小结 233 第 序言 ASP.NET Core发展历程的某些方面让我想起了15 年前ASP.NET刚问世的时候。1999年秋天,当时还很年 轻的Scott Guthrie ——现在担任Microsoft的副总裁 ——在伦敦向一小群Web开发人员展示了一个被称为 ASP+的新东西。当时还是Active Server Pages居于统 治地位的时代,ASP+试图引入一种新语法,将VBScript 代码放回服务器,并用一种编译语言来表达这种语法。 ASP+是一项重大的成就。Scott进行展示时,公众还不 知道有.NET,它要到第二年夏天才会正式公布。Scott 在一个独立的运行环境中进行演示(演示内容包括一个 令人惊叹的Web Service示例),这个运行时环境基于一 个能够监听端口80的自定义工作进程(一个控制台应用 程序)。最早的演示使用了普通的Visual Basic和C++ 代码,以及Win32 API。很快,ASP+被吸收到了新 的.NET Framework中,并最终蜕变为ASP.NET。 ASP.NET Core在一开始被展示时,同样作为一个新的独 立框架,这是一个从头编写的框架,将Microsoft的Web 堆栈的可扩展性和性能提升到了新高度。但在这个过程 中,ASP.NET Core的开发团队看到了一个诱人的机会来 让ASP.NET Core框架在多个平台上可用。为实现这个目 标,必须使.NET Framework的一个子集在目标平台上可 用,这意味着必须创建一个新的.NET Framework。最终 ,一个新的.NET Framework被开发出来了。在很长时间 内,ASP.NET Core是一个移动的目标,而移动这个目标 的机制没有人清楚,并且没有被及时、有效地沟通。大 约20年前,我们还没有如今这种社交媒体带来的即时分 享的态度。而且,虽然ASP+很可能也是一个移动的目标 ,但是Microsoft以外的人们(甚至Microsoft内没有直 接参与ASP+项目的人们)并不知道这一点。虽然ASP.NET 和ASP.NET Core的发展过程在关键方面可能看上去是相 同的,但是它们的发展环境有很大区别。ASP.NET之前 的Web是新生阶段的Web,可扩展的服务器端技术有限, 而且可扩展性并不像今天这样是一个严峻的问题。同时 ,有大量应用程序需要针对Web重写,只是在等待由可 靠的供应商提供的一个可靠的平台。如今,即使不使用 ASP.NET Core,也仍然有许多框架可供使用。但是, ASP.NET Core并不只是前端技术;它也是后端技术、 Web API以及要独立部署或者部署到Service Fabric的 小型简洁的Web(容器化)整体式应用程序。ASP.NET Core还可以用在多个硬件/软件平台上。很难说在近期 甚至目前,ASP.NET Core会不会成为每个公司和团队必 须使用的技术。但可以肯定,ASP.NET Core是ASP.NET 开发人员需要了解的一种技术,是在多种平台上进行 Web开发时可供使用的另一种全栈解决方案。《ASP.NET Core开发实战》面向的读者对象完全的新手(至少是对 Web开发没有一点了解的新手)不适合阅读《ASP.NET Core开发实战》。《ASP.NET Core开发实战》针对的 是ASP.NET开发人员,尤其是具有MVC背景的ASP.NET开 发人员。同时,《ASP.NET Core开发实战》适合有丰富 开发经验的Web开发人员,特别是具有MVC开发背景但是 新接触ASP.NET的Web开发人员。虽然ASP.NET Core是 一种全新的框架,但是它与ASP.NET MVC有许多共同点 ,与Web Forms也有少量共同点。如果读者使用 Microsoft技术或者计划使用Microsoft技术,那么对 于全栈开发,ASP.NET Core提供了一个出色的选择,包 括与Azure云紧密结合起来。《ASP.NET Core开发实战 》的假定《ASP.NET Core开发实战》假定读者对 Microsoft堆栈(其他平台也可以)上的Web开发有基本了 解,最好有成熟的理解。《ASP.NET Core开发实战》不 适合的读者对象如果读者是Web编程的新手,从来没有 听说过ASP.NET,想要寻找一本ASP.NET Core的分步骤 指南,那么《ASP.NET Core开发实战》可能不是一个理 想选择。《ASP.NET Core开发实战》结构《ASP.NET Core开发实战》分为5个部分。● 第I部分概述ASP.NET Core的基础知识,并介绍hello-world应用程序。● 第II部分关注MVC应用程序模型,并介绍其核心组成, 如控制器和视图。● 第III部分介绍一些公共的开发问 题,如身份验证、配置和数据访问。● 第IV部分介绍 用于构建可用的、有效的表示层的技术和其他框架。● 第V部分介绍运行时管道、部署和迁移策略。系统需求 要完成《ASP.NET Core开发实战》的练习,需要配备下 面列出的硬件和软件:● Windows 7或更高版本, macOS 10.12或更高版本。● 或者,可使用众多Linux 发行版中的一种,请参考https://docs.microsoft. com/en-us/dotnet/core/linux-prerequisites。● Visual Studio 2015或更高版本的任意版本;Visual Studio Code。● Internet连接,以下载软件或者章 节示例。代码示例下载《ASP.NET Core开发实战》中的 所有代码,可在https://aka.ms/ ASPNetCore/downloads上找到,也可扫描封底二维码 获取。勘误、更新和图书支持我们已经尽最大努力来确 保《ASP.NET Core开发实战》及其配套内容的准确性。 在以下网址,可以查阅《ASP.NET Core开发实战》的更 新列表,其中列举了提交的勘误及对应的更正: https://aka.ms/ASPNetCore/errata如果读者发现了 列表中没有列出的错误,请在该页面上把错误提交给我 们。如果需要额外的支持,请给Microsoft Press Book Support发送邮件,地址为 mspinput@microsoft.com。请注意,上面列出的地址 不提供对Microsoft的软件和硬件产品的支持。要想获 得关于Microsoft的软件和硬件的帮助,请访问 http://support.microsoft.com。保持联系让我们保 持对话!在Twitter上可以联系到我们: http://twitter.com/MicrosoftPress。
导语 《ASP.NET Core开发实战》是一本权威指南,详细讲解了如何使用微软新技术ASP.NET Core框架进行实用的Web应用程序开发。针对使用ASP.NET Core解决现实问题,Microsoft MVP Dino Esposito介绍了业界证实有效的技术,并提供了精心设计的示例代码。他手把手引导你使用ASP.NET Core的所有关键技术,包括.NET Core、EF Core、ASP.NET Identity、依赖注入等。Dino全面介绍了ASP.NET Core的跨平台功能,以及与老版本的ASP.NET的区别。他还为想要构建生产解决方案(包括用于移动设备的解决方案)的每个开发人员提供了完整的学习路径。 |