描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787111669845
内容简介
在Web应用研发领域容器编排、微服务、服务网格等先进架构已大行其道的今天,本书作为ASP.NET Core的入门教程,可以让广大开发人员在自己的技能列表里添加上这个关键项。本书从ASP.NET Core的核心组件入手,延伸到MVC、WebAPI、SignalR(实时通信应用)、Blazor(wasm应用)、机器学习等多种应用开发,全方位地讲解ASP.NET Core的应用场景、开发实践和部署发布,带领读者学习从开发到发布基于ASP.NET Core项目的全过程。
本书主要针对的是对C#语法和Web开发有一定了解、期望使用C#语言开发Web项目的初学者,也可以是具有ASP.NET MVC开发经验、希望通过ASP.NET Core提升跨平台和容器化开发能力的开发者。
本书主要针对的是对C#语法和Web开发有一定了解、期望使用C#语言开发Web项目的初学者,也可以是具有ASP.NET MVC开发经验、希望通过ASP.NET Core提升跨平台和容器化开发能力的开发者。
目 录
前言
第1章 为什么选择ASP.NET Core1
1.1 什么是.NET1
1.2 ASP.NET Core的特点3
1.3 读者能从本书学到什么4
第2章 ASP.NET Core开发工具安装6
2.1 .NET Core SDK安装6
2.1.1 获取.NET Core SDK6
2.1.2 安装.NET Core SDK7
2.2 Visual Studio Code安装7
2.2.1 获取Visual Studio Code8
2.2.2 安装Visual Studio Code8
2.2.3 更新Visual Studio Code10
2.3 Visual Studio 2019安装10
2.3.1 确保计算机可以安装Visual Studio10
2.3.2 获取 Visual Studio11
2.3.3 安装Visual Studio安装程序11
2.3.4 启动安装程序12
第3章 ASP.NET Core核心组件详解13
3.1 框架总述13
3.2 依赖注入14
3.2.1 什么是依赖注入14
3.2.2 依赖注入组件15
3.2.3 服务描述类ServiceDescriptor16
3.2.4 IServiceCollection与服务注册18
3.2.5 通过IServiceProvider获取服务实例20
3.2.6 作用域与生命周期22
3.2.7 IDisposable与生命周期25
3.2.8 扩展接口IServiceProviderFactory25
3.2.9 在Controller中获取服务28
3.3 配置组件29
3.3.1 配置组件的构造过程29
3.3.2 内存配置提供程序32
3.3.3 命令行配置提供程序32
3.3.4 环境变量配置提供程序34
3.3.5 文件配置提供程序35
3.3.6 Key-per-file配置提供程序37
3.3.7 使用IConfiguration读取配置38
3.3.8 使用强类型接收配置40
3.4 选项组件42
3.4.1 选项的注入与使用42
3.4.2 使用命名选项44
3.4.3 验证选项46
3.4.4 选项后期配置47
3.5 中间件48
3.5.1 注册中间件49
3.5.2 常用的内置中间件51
3.6 路由与终结点52
3.6.1 注册终结点53
3.6.2 路由模板54
3.6.3 特性路由55
3.6.4 路由约束56
3.6.5 生成链接57
第4章 基于MVC设计模式的Web应用59
4.1 创建第一个ASP.NET Core MVC项目59
4.2 什么是MVC模式63
4.3 视图64
4.3.1 使用视图的好处65
4.3.2 创建视图66
4.3.3 利用控制器指定视图66
4.3.4 视图发现67
4.3.5 向视图传递数据68
4.3.6 动态视图72
4.4 部分视图73
4.4.1 何时使用部分视图73
4.4.2 声明部分视图73
4.4.3 引用部分视图74
4.4.4 呈现部分视图75
4.4.5 通过部分视图访问数据76
4.5 控制器78
4.5.1 什么是控制器78
4.5.2 Action79
4.5.3 横切关注点80
4.6 路由80
4.6.1 自定义路由81
4.6.2 混合路由82
4.6.3 动态路由82
4.7 区域85
4.8 筛选器89
4.8.1 筛选器的工作原理90
4.8.2 实现91
4.9 模型绑定器95
4.9.1 什么是模型绑定95
4.9.2 目标96
4.9.3 源97
4.9.4 不存在模型属性的源98
4.9.5 类型转换错误99
4.9.6 复杂类型99
4.9.7 集合101
4.9.8 字典102
4.9.9 模型绑定路由数据和URL字符串参数的全局行为102
4.9.10 特殊数据类型103
4.9.11 输入格式化程序103
4.9.12 从模型绑定中排除指定类型105
4.9.13 手动模型绑定106
第5章 基于ASP.NET Core的Web API107
5.1 创建ASP.NET Core的Web API项目107
5.2 带有Swagger的Web API帮助页111
5.2.1 Swashbuckle.AspNetCore111
5.2.2 Swagger规范112
5.2.3 Swagger UI113
5.3 ASP.NET Core Web API中控制器的返回类型114
5.3.1 特定类型114
5.3.2 IActionResult 类型115
5.3.3 ActionResult 类型117
5.4 Web API约定118
5.4.1 应用Web API约定119
5.4.2 创建Web API约定120
第6章 ASP.NET Core中的数据库访问122
6.1 Entity Framework Core122
6.2 安装并运行MySQL123
6.2.1 启动MySQL125
6.2.2 创建数据库125
6.3 数据库访问126
6.3.1 添加数据库上下文126
6.3.2 创建控制器127
6.4 .NET Core Dapper128
第7章 安全与身份认证129
7.1 身份认证129
7.1.1 身份认证处理程序130
7.1.2 身份认证方案130
7.1.3 身份认证服务130
7.1.4 身份认证中间件131
7.1.5 添加基于策略的身份认证方案132
7.1.6 用户信息模型133
7.1.7 添加自定义身份认证处理程序133
7.2 授权135
7.2.1 简单授权135
7.2.2 基于角色的授权136
7.2.3 基于策略的授权137
7.2.4 授权中间件137
7.2.5 授权处理程序138
7.2.6 自定义授权处理程序139
7.3 集成IdentityServer4139
7.4 数据保护141
7.4.1 数据保护入门142
7.4.2 用户机密管理143
7.4.3 小结143
7.5 强制HTTPS143
7.5.1 RequireHttpsAttribute144
7.5.2 HTTPS重定向中间件144
7.5.3 HTTP严格传输安全协议145
7.6 防跨站请求伪造145
7.6.1 什么是跨站请求伪造146
7.6.2 同步令牌模式146
7.7 防开放重定向攻击147
7.8 防跨站脚本148
7.8.1 防范跨站脚本攻击149
7.8.2 使用Razor的HTML编码149
7.8.3 使用Razor的JavaScript编码149
7.8.4 小结150
7.9 跨域请求150
7.9.1 跨域资源共享150
7.9.2 启用CORS中间件150
7.9.3 配置需要CORS的资源路径152
7.9.4 小结152
第8章 基于SignalR开发实时通信应用153
8.1 基于SignalR的实时通信153
8.1.1 数据交互传输153
8.1.2 Hub中心154
8.2 服务端实现155
8.2.1 创建和使用Hub155
8.2.2 启用SignalR155
8.2.3 上下文对象Context156
8.2.4 Clients对象156
8.2.5 向客户端发送消息157
8.2.6 处理连接事件158
8.2.7 用户和组158
8.2.8 服务的可扩展实现159
8.3 客户端实现160
8.3.1 创建connection对象160
8.3.2 使用on添加客户端方法160
8.3.3 使用start开始连接服务端160
8.3.4 使用invoke调用服务端方法161
8.3.5 自动连接161
8.3.6 手动重连163
第9章 基于Blazor的Web客户端技术164
9.1 Blazor的应用模型165
9.2 创建项目166
9.3 页面路由169
9.4 数据绑定171
9.5 组件172
9.5.1 模板化组件172
9.5.2 组件库174
9.6 状态管理176
第10章 日志与监控181
10.1 日志组件181
10.1.1 日志类别183
10.1.2 日志级别184
10.1.3 日志对象与依赖注入185
10.1.4 事件ID186
10.1.5 使用日志模板187
10.1.6 日志作用域188
10.1.7 筛选日志输出192
10.2 健康检查组件193
10.2.1 注册健康检查194
10.2.2 配置健康检查终结点196
10.2.3 自定义健康检查项198
10.2.4 检查结果发布器199
第11章 远程调用201
11.1 使用HttpClient调用远程API201
11.1.1 构造HttpClient201
11.1.2 发出请求203
11.1.3 设置代理204
11.1.4 处理Cookie204
11.2 使用HttpClientFactory机制管理HttpClient205
11.2.1 注册并使用HttpClientFactory205
11.2.2 使用命名客户端207
11.2.3 使用类型化客户端208
11.2.4 使用ConfigureHttpClient209
11.2.5 使用ConfigurePrimaryHttpMessageHandler210
11.2.6 理解生命周期211
11.2.7 HTTP请求管道212
11.2.8 使用ConfigureHttpMessageHandlerBuilder213
11.2.9 关于请求日志214
11.3 使用gRPC实现高性能远程调用215
11.3.1 定义接口描述216
11.3.2 配置服务端217
11.3.3 配置客户端219
11.3.4 使用dotnet-grpc命令行工具管理 .proto 文件引用220
第12章 部署ASP.NET Core应用222
12.1 部署到IIS中222
12.1.1 概述222
12.1.2 下载和安装ASP.NET Core模块223
12.1.3 部署到IIS
第1章 为什么选择ASP.NET Core1
1.1 什么是.NET1
1.2 ASP.NET Core的特点3
1.3 读者能从本书学到什么4
第2章 ASP.NET Core开发工具安装6
2.1 .NET Core SDK安装6
2.1.1 获取.NET Core SDK6
2.1.2 安装.NET Core SDK7
2.2 Visual Studio Code安装7
2.2.1 获取Visual Studio Code8
2.2.2 安装Visual Studio Code8
2.2.3 更新Visual Studio Code10
2.3 Visual Studio 2019安装10
2.3.1 确保计算机可以安装Visual Studio10
2.3.2 获取 Visual Studio11
2.3.3 安装Visual Studio安装程序11
2.3.4 启动安装程序12
第3章 ASP.NET Core核心组件详解13
3.1 框架总述13
3.2 依赖注入14
3.2.1 什么是依赖注入14
3.2.2 依赖注入组件15
3.2.3 服务描述类ServiceDescriptor16
3.2.4 IServiceCollection与服务注册18
3.2.5 通过IServiceProvider获取服务实例20
3.2.6 作用域与生命周期22
3.2.7 IDisposable与生命周期25
3.2.8 扩展接口IServiceProviderFactory25
3.2.9 在Controller中获取服务28
3.3 配置组件29
3.3.1 配置组件的构造过程29
3.3.2 内存配置提供程序32
3.3.3 命令行配置提供程序32
3.3.4 环境变量配置提供程序34
3.3.5 文件配置提供程序35
3.3.6 Key-per-file配置提供程序37
3.3.7 使用IConfiguration读取配置38
3.3.8 使用强类型接收配置40
3.4 选项组件42
3.4.1 选项的注入与使用42
3.4.2 使用命名选项44
3.4.3 验证选项46
3.4.4 选项后期配置47
3.5 中间件48
3.5.1 注册中间件49
3.5.2 常用的内置中间件51
3.6 路由与终结点52
3.6.1 注册终结点53
3.6.2 路由模板54
3.6.3 特性路由55
3.6.4 路由约束56
3.6.5 生成链接57
第4章 基于MVC设计模式的Web应用59
4.1 创建第一个ASP.NET Core MVC项目59
4.2 什么是MVC模式63
4.3 视图64
4.3.1 使用视图的好处65
4.3.2 创建视图66
4.3.3 利用控制器指定视图66
4.3.4 视图发现67
4.3.5 向视图传递数据68
4.3.6 动态视图72
4.4 部分视图73
4.4.1 何时使用部分视图73
4.4.2 声明部分视图73
4.4.3 引用部分视图74
4.4.4 呈现部分视图75
4.4.5 通过部分视图访问数据76
4.5 控制器78
4.5.1 什么是控制器78
4.5.2 Action79
4.5.3 横切关注点80
4.6 路由80
4.6.1 自定义路由81
4.6.2 混合路由82
4.6.3 动态路由82
4.7 区域85
4.8 筛选器89
4.8.1 筛选器的工作原理90
4.8.2 实现91
4.9 模型绑定器95
4.9.1 什么是模型绑定95
4.9.2 目标96
4.9.3 源97
4.9.4 不存在模型属性的源98
4.9.5 类型转换错误99
4.9.6 复杂类型99
4.9.7 集合101
4.9.8 字典102
4.9.9 模型绑定路由数据和URL字符串参数的全局行为102
4.9.10 特殊数据类型103
4.9.11 输入格式化程序103
4.9.12 从模型绑定中排除指定类型105
4.9.13 手动模型绑定106
第5章 基于ASP.NET Core的Web API107
5.1 创建ASP.NET Core的Web API项目107
5.2 带有Swagger的Web API帮助页111
5.2.1 Swashbuckle.AspNetCore111
5.2.2 Swagger规范112
5.2.3 Swagger UI113
5.3 ASP.NET Core Web API中控制器的返回类型114
5.3.1 特定类型114
5.3.2 IActionResult 类型115
5.3.3 ActionResult 类型117
5.4 Web API约定118
5.4.1 应用Web API约定119
5.4.2 创建Web API约定120
第6章 ASP.NET Core中的数据库访问122
6.1 Entity Framework Core122
6.2 安装并运行MySQL123
6.2.1 启动MySQL125
6.2.2 创建数据库125
6.3 数据库访问126
6.3.1 添加数据库上下文126
6.3.2 创建控制器127
6.4 .NET Core Dapper128
第7章 安全与身份认证129
7.1 身份认证129
7.1.1 身份认证处理程序130
7.1.2 身份认证方案130
7.1.3 身份认证服务130
7.1.4 身份认证中间件131
7.1.5 添加基于策略的身份认证方案132
7.1.6 用户信息模型133
7.1.7 添加自定义身份认证处理程序133
7.2 授权135
7.2.1 简单授权135
7.2.2 基于角色的授权136
7.2.3 基于策略的授权137
7.2.4 授权中间件137
7.2.5 授权处理程序138
7.2.6 自定义授权处理程序139
7.3 集成IdentityServer4139
7.4 数据保护141
7.4.1 数据保护入门142
7.4.2 用户机密管理143
7.4.3 小结143
7.5 强制HTTPS143
7.5.1 RequireHttpsAttribute144
7.5.2 HTTPS重定向中间件144
7.5.3 HTTP严格传输安全协议145
7.6 防跨站请求伪造145
7.6.1 什么是跨站请求伪造146
7.6.2 同步令牌模式146
7.7 防开放重定向攻击147
7.8 防跨站脚本148
7.8.1 防范跨站脚本攻击149
7.8.2 使用Razor的HTML编码149
7.8.3 使用Razor的JavaScript编码149
7.8.4 小结150
7.9 跨域请求150
7.9.1 跨域资源共享150
7.9.2 启用CORS中间件150
7.9.3 配置需要CORS的资源路径152
7.9.4 小结152
第8章 基于SignalR开发实时通信应用153
8.1 基于SignalR的实时通信153
8.1.1 数据交互传输153
8.1.2 Hub中心154
8.2 服务端实现155
8.2.1 创建和使用Hub155
8.2.2 启用SignalR155
8.2.3 上下文对象Context156
8.2.4 Clients对象156
8.2.5 向客户端发送消息157
8.2.6 处理连接事件158
8.2.7 用户和组158
8.2.8 服务的可扩展实现159
8.3 客户端实现160
8.3.1 创建connection对象160
8.3.2 使用on添加客户端方法160
8.3.3 使用start开始连接服务端160
8.3.4 使用invoke调用服务端方法161
8.3.5 自动连接161
8.3.6 手动重连163
第9章 基于Blazor的Web客户端技术164
9.1 Blazor的应用模型165
9.2 创建项目166
9.3 页面路由169
9.4 数据绑定171
9.5 组件172
9.5.1 模板化组件172
9.5.2 组件库174
9.6 状态管理176
第10章 日志与监控181
10.1 日志组件181
10.1.1 日志类别183
10.1.2 日志级别184
10.1.3 日志对象与依赖注入185
10.1.4 事件ID186
10.1.5 使用日志模板187
10.1.6 日志作用域188
10.1.7 筛选日志输出192
10.2 健康检查组件193
10.2.1 注册健康检查194
10.2.2 配置健康检查终结点196
10.2.3 自定义健康检查项198
10.2.4 检查结果发布器199
第11章 远程调用201
11.1 使用HttpClient调用远程API201
11.1.1 构造HttpClient201
11.1.2 发出请求203
11.1.3 设置代理204
11.1.4 处理Cookie204
11.2 使用HttpClientFactory机制管理HttpClient205
11.2.1 注册并使用HttpClientFactory205
11.2.2 使用命名客户端207
11.2.3 使用类型化客户端208
11.2.4 使用ConfigureHttpClient209
11.2.5 使用ConfigurePrimaryHttpMessageHandler210
11.2.6 理解生命周期211
11.2.7 HTTP请求管道212
11.2.8 使用ConfigureHttpMessageHandlerBuilder213
11.2.9 关于请求日志214
11.3 使用gRPC实现高性能远程调用215
11.3.1 定义接口描述216
11.3.2 配置服务端217
11.3.3 配置客户端219
11.3.4 使用dotnet-grpc命令行工具管理 .proto 文件引用220
第12章 部署ASP.NET Core应用222
12.1 部署到IIS中222
12.1.1 概述222
12.1.2 下载和安装ASP.NET Core模块223
12.1.3 部署到IIS
前 言
从2013年Docker应用容器开源开始,持续发展至今,容器编排、微服务、服务网格等先进架构已在Web应用研发领域盛行。而在.NET Core诞生之前,.NET开发平台仅支持Windows系统,虽然可以通过开源项目Mono实现跨平台,但是支持度不够,应用也不广泛。
随着微软的商业策略向云计算方向倾斜,尤其是容器云的发展,微软逐步对.NET开放,将新的.NET定义为开源的、跨平台的开发平台,而为了避免命名歧义,将其命名为.NET Core。现今,主流的编程语言都会提供Web开发框架。ASP.NET Core是.NET Core平台当前最优秀的Web开发框架,是基于多年的框架设计经验进行全新设计的成果,因为它针对Docker和Kubernetes环境进行了优化,所以具有高性能和低内存占用的特点。另外,.NET Core框架基于组件化的设计理念,让开发者可以根据需要进行组装,以应对不同的应用场景和需求。
本书从ASP.NET Core的核心组件入手,延伸到MVC、Web API、SignalR(实时通信应用)、Blazor(wasm应用)、机器学习等多种应用,全方位地讲解ASP.NET Core的应用场景、开发实践、部署和发布,带领读者学习从开发到发布基于ASP.NET Core的项目的全过程。作为ASP.NET Core的入门教程,本书将引导读者开启容器化微服务架构的开发之旅。阅读本书不需要有丰富的Web开发经验,但需要有一定的编程基础,特别是要掌握C#语言。读者学完本书之后,能够对ASP.NET Core框架的应用有一定的了解,知道其内部的设计思路以及如何通过框架组件设计各类业务来解决相应的问题。
本书的代码开源在GitHub上,具体地址是https://github.com/xiaobaoonline/aspnetcore-in-action。代码基于ASP.NET Core 3.1编写而成,建议读者在Visual Studio 2019集成开发环境中运行。由于编者水平有限,书中难免存在疏漏,恳请读者批评指正。另外,本书资源可以登录机械工业出版社华章公司的网站(www.hzbook.com)下载,方法是:搜索到本书,然后在页面上的“资源下载”模块下载即可。如果下载有问题,请发送电子邮件至[email protected]。
读者可以在https://github.com/xiaobaoonline/aspnetcore-in-action/issues处提出意见或进行反馈。让我们在学习的道路上共同进步!
在写作本书的过程中我们得到了很多人的鼓励和支持。感谢校宝在线上上下下的鼎力支持,特别是公司董事长兼CEO张以弛的大力支持,让我们在工作之余有足够的时间投入到写作中。感谢家人的鼓励和支持,没有他们,这本书是不可能完成的。
编 者
2020年11月9日
随着微软的商业策略向云计算方向倾斜,尤其是容器云的发展,微软逐步对.NET开放,将新的.NET定义为开源的、跨平台的开发平台,而为了避免命名歧义,将其命名为.NET Core。现今,主流的编程语言都会提供Web开发框架。ASP.NET Core是.NET Core平台当前最优秀的Web开发框架,是基于多年的框架设计经验进行全新设计的成果,因为它针对Docker和Kubernetes环境进行了优化,所以具有高性能和低内存占用的特点。另外,.NET Core框架基于组件化的设计理念,让开发者可以根据需要进行组装,以应对不同的应用场景和需求。
本书从ASP.NET Core的核心组件入手,延伸到MVC、Web API、SignalR(实时通信应用)、Blazor(wasm应用)、机器学习等多种应用,全方位地讲解ASP.NET Core的应用场景、开发实践、部署和发布,带领读者学习从开发到发布基于ASP.NET Core的项目的全过程。作为ASP.NET Core的入门教程,本书将引导读者开启容器化微服务架构的开发之旅。阅读本书不需要有丰富的Web开发经验,但需要有一定的编程基础,特别是要掌握C#语言。读者学完本书之后,能够对ASP.NET Core框架的应用有一定的了解,知道其内部的设计思路以及如何通过框架组件设计各类业务来解决相应的问题。
本书的代码开源在GitHub上,具体地址是https://github.com/xiaobaoonline/aspnetcore-in-action。代码基于ASP.NET Core 3.1编写而成,建议读者在Visual Studio 2019集成开发环境中运行。由于编者水平有限,书中难免存在疏漏,恳请读者批评指正。另外,本书资源可以登录机械工业出版社华章公司的网站(www.hzbook.com)下载,方法是:搜索到本书,然后在页面上的“资源下载”模块下载即可。如果下载有问题,请发送电子邮件至[email protected]。
读者可以在https://github.com/xiaobaoonline/aspnetcore-in-action/issues处提出意见或进行反馈。让我们在学习的道路上共同进步!
在写作本书的过程中我们得到了很多人的鼓励和支持。感谢校宝在线上上下下的鼎力支持,特别是公司董事长兼CEO张以弛的大力支持,让我们在工作之余有足够的时间投入到写作中。感谢家人的鼓励和支持,没有他们,这本书是不可能完成的。
编 者
2020年11月9日
评论
还没有评论。