编辑推荐

1.针对.NET Core 3.1讲解;
2.提供完整源代码下载且代码可复用;
3.本书附送免费视频资源,供读者配合图书学习;
4.本书针对一个完整项目进行开发,而不是只有零散的代码段;
5.案例丰富、实用,采用了流行框架中的设计模式及实用技术;
6.具有完整的权限功能,统一处理拦截异常、错误页面及日志信息。

经过几年的发展,ASP.NET Core 已趋于稳定,社区生态比较完善。在技术日新月异的今天,我们需要不断学习,并在学习中不断成长。本书由浅入深地讲解 ASP.NET Core,如果你想通过学习 ASP.NET Core 来获得更多的机会,那么我推荐本书,在学习 ASP.NET Core 的过程中它可以给予我们启发和帮助。
——微软MVP 李志强 (晓晨master)

ASP.NET Core已成为微软跨平台开发的利器。本书基于ASP.NET Core 3.1版本,由浅入深地介绍了如何从头开始构建ASP.NET Core应用,内容详实,通俗易懂,非常适合.NET开发者学习参考。
—— 微软MVP 闫晓迪

我一直认为微软官方文档是入门学习最好的资料,但在阅读了梁桐铭的书稿后,我认为他写的这本书更加适合ASP.NET Core初学者参考阅读,从对.NET的历史回顾到对ASP.NET Core各组件由浅入深的讲解,都是他学习心得的真心传授。
——深圳市友浩达科技有限公司 CEO、微软MVP 张善友

即便ASP.NET Core从2016年首发到现在已经过去4年,但其在开发者市场中的占比仍然不高。一方面是因为ASP.NET Core技术的主要阵地其实依然是以企业信息化为主的传统企业级应用层面,考虑到成本等综合因素,这些企业无法适时地更新自己的技术;另一方面是因为培养能够熟练驾驭ASP.NET Core技术的年轻开发者的速度,赶不上企业飞速发展的需要。即便官方文档很齐全,但系统教程的缺乏,使开发者或企业无法从ASP.NET Core的社区资源中受益。这本书有望成为初级和中级ASP.NET Core开发者的精神食粮。根据作者介绍的详细步骤,开发者能够快速成长为合格的新一代ASP.NET Core开发者。本书作者是ASP.NET Core技术的先行者,早年在领域驱动设计等诸多社区贡献了大量学习资源,也在网上开设了ASP.NET Core在线课程,而这本书也是他过去若干年经验积累的结晶。
——深圳敢为软件研发负责人、长沙.NET技术社区组织者 邹溪源

作者在本书的课程管理系统中融入了他积累多年的 ASP.NET Core 实践经验,以此为主线层层深入,对 ASP.NET Core 的各项重要功能进行了充分的讲解和演示。同时,书中还加入了对部分框架源码的分析解读,能更好地帮助我们掌握程序的编写技巧。相信无论你是初学者,还是具有一定基础的开发者,本书都是一本可以让你全面学习 ASP.NET Core,并且快速运用到实践中的佳作!
——盛派网络创始人、微软 RD / MVP 苏震巍

内容简介

本书是一本系统地介绍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感兴趣的读者阅读,也可以作为高等院校相关专业的教学用书和培训学校的教材。

作者简介

梁桐铭,微软最有价值专家、Microsoft AI Open Hack教练、Microsoft Tech Summit 2018讲师,52ABP开源框架作者。2015年开始在国内推广ASP.NET Boilerplate Project开源框架。拥有多年开发经验与技术团队管理经验,熟悉互联网及电商业。负责过多个大型项目的开发和管理,擅长应用系统项目的规划设计、及企业解决方案的设计。

目录

第 一部分
第 1章 编程语言和 .NET的关系 2
1.1 编程语言 2
1.2 编程语言中的C#、 F#和VB.NET 2
1.3 C#与.NET 3
1.4 小结 3
第 2章 .NET平台 4
2.1 回顾.NET发展历史 4
2.1.1 .NET Framework 4
2.1.2 .NET Framework与Java 5
2.1.3 .NET的跨平台之路 5
2.2 Mono神奇的跨平台解决方案 6
2.3 .NET Standard 6
2.4 .NET Core 7
2.4.1 .NET Core的特点 7
2.4.2 .NET Core 3.1 8
2.5 .NET Core与其他平台 8
2.5.1 .NET Core与.NET Framework 8
2.5.2 .NET Core与Mono 8
2.5.3 .NET Core与ASP .NET Core 8
2.6 ASP .NET的发展历程 9
2.7 ASP.NET Core的未来发展 9
2.8 小结 10
第3章 .NET 5的统一整合方案 11
3.1 进化中的.NET 11
3.2 .NET 5 (.NET Core vNext) 12
3.3 .NET Core实现真正的统一开发平台 13
3.4 小结 14
第4章 创建ASP.NET Core项目 15
4.1 ASP.NET Core 15
4.2 ASP.NET Core的特性 15
4.3 配置计算机的开发环境 17
4.3.1 下载并安装Visual Studio 2019 17
4.3.2 下载并安装.NET Core SDK 18
4.4 创建ASP.NET Core Web程序 18
4.5 内置的ASP.NET Core模板说明 20
4.6 小结 21
第5章 ASP.NET Core项目启动流程 23
5.1 ASP.NET Core项目文件 23
5.2 ASP.NET Core项目的入口 25
5.3 ASP.NET Core中的进程内与进程外托管模型 26
5.3.1 进程内托管 27
5.3.2 Kestrel 28
5.3.3 CLI 28
5.4 ASP.NET Core进程外托管 29
5.5 探讨几个问题 30
5.6 小结 31
第6章 ASP.NET Core中的配置文件 33
6.1 启动配置信息 33
6.2 通过GUI来设置launchSettings文件 35
6.3 ASP.NET Core appsettings.json文件 36
6.3.1 访问配置信息 37
6.3.2 appsettings.json 39
6.3.3 用户机密 39
6.3.4 环境变量 41
6.3.5 命令行参数 41
6.4 ASP.NET Core IConfiguration服务与依赖注入 42
6.5 小结 44
第7章 ASP.NET Core中的中间件及其工作原理 45
7.1 中间件 45
7.2 中间件在ASP.NET Core中的工作原理 47
7.3 配置ASP.NET Core请求处理管道 48
7.4 Configure()代码解析 49
7.4.1 中间件掌握测试 49
7.4.2 中间件传递 50
7.4.3 实践中间件的工作流程 50
7.5 小结 52
第8章 ASP.NET Core中的静态文件中间件 54
8.1 添加静态文件中间件 54
8.2 支持默认文件 55
8.3 自定义默认文件 56
8.4 UseFileServer中间件 56
8.5 小结 57
第9章 ASP.NET Core开发人员异常页面 58
9.1 UseDeveloperExceptionPage中间件 58
9.2 自定义UseDeveloperExceptionPage中间件 60
9.3 UseDeveloperExceptionPage中间件如何工作 60
9.4 ASP.NET Core中的环境变量配置 61
9.5 配置ASPNETCORE_ENVIRONMENT变量 62
9.6 IWebHostEnvironment服务中的常用方法 64
9.7 小结 65
第二部分
第 10章 详解ASP.NET Core MVC的设计模式 68
10.1 什么是MVC 68
10.1.1 MVC如何工作 69
10.1.2 Model 70
10.1.3 View 71
10.1.4 Controller 71
10.2 在ASP.NET Core中安装MVC 73
10.2.1 在ASP.NET Core中配置MVC 73
10.2.2 添加HomeController 74
10.3 AddMvc()和AddMvcCore()的源代码解析 75
10.4 小结 77
第 11章 依赖注入与Student模型 78
11.1 依赖注入 78
11.2 详细了解ASP.NET Core中的依赖注入 80
11.3 使用依赖注入注册服务 81
11.4 小结 83
第 12章 从Controller传递内容协商数据到View 84
12.1 Controller请求及相应流程说明 84
12.1.1 从Controller中返回JSON数据 85
12.1.2 安装Fiddler 86
12.2 在Controller中实现内容协商 86
12.3 从Controller返回View 89
12.3.1 MVC中的View 89
12.3.2 视图文件夹结构 90
12.3.3 视图发现 90
12.3.4 View()重载方法 93
12.4 自定义视图发现 93
12.4.1 指定视图文件路径 93
12.4.2 相对视图文件路径 94
12.4.3 其他View()重载方法 94
12.5 从Controller传递数据到View 95
12.5.1 数据从Controller传递到View的方法 95
12.5.2 使用ViewData将数据从Controller传递到View 95
12.5.3 使用ViewBag将数据从Controller传递到View 97
12.5.4 ViewData和ViewBag的对比 98
12.5.5 在ASP.NET Core MVC中创建一个强类型视图 98
12.6 小结 100
第 13章 完善MVC框架内容 102
13.1 为什么需要在ASP.NET Core MVC中使用ViewModel 102
13.1.1 ViewModel示例 103
13.1.2 在Controller中使用ViewModel 103
13.1.3 在视图中使用ViewModel 104
13.2 在ASP.NET Core MVC中实现List视图 104
13.2.1 修改IStudentRepository中的代码 105
13.2.2 修改MockStudentRepository中的代码 105
13.2.3 修改HomeController中的代码 106
13.2.4 视图Index.cshtml中代码的变化 106
13.3 为什么需要布局视图 107
13.3.1 ASP.NET Core MVC中的布局视图 108
13.3.2 创建布局视图 109
13.3.3 使用布局视图 109
13.4 布局页面中的节点 110
13.4.1 布局页面示例 110
13.4.2 渲染节点 111
13.4.3 使布局部分可选 111
13.4.4 节点的使用 112
13.5 什么是_ViewStart.cshtml文件 113
13.5.1 ASP.NET Core MVC中的_ViewStart.cshtml文件 113
13.5.2 _ViewStart.cshtml文件支持分层 113
13.5.3 逻辑判断调用布局视图 114
13.5.4 修改视图 114
13.6 ASP.NET Core MVC中的_ViewImports.cshtml文件 116
13.7 小结 117
第 14章 ASP.NET Core MVC中的路由 118
14.1 ASP.NET Core MVC中的默认路由 119
14.2 UseMvcWithDefaultRoute()方法中的代码 120
14.3 ASP.NET Core MVC中的属性路由 122
14.3.1 属性路由示例 123
14.3.2 属性路由参数 123
14.3.3 属性路由可选参数 124
14.3.4 控制器和操作方法名称 125
14.3.5 属性路由支持多层 125
14.3.6 在属性路由中自定义路由 128
14.3.7 常规路由与属性路由对比 129
14.4 ASP.NET Core中新增的路由中间件 129
14.4.1 路由中间件UseRouting 130
14.4.2 路由中间件UseEndpoints 131
14.5 LibMan轻量级包管理器 133
14.5.1 使用LibMan安装Bootstrap 133
14.5.2 libman.json文件 134
14.5.3 清理和还原客户端库 134
14.5.4 卸载或更新客户端库 134
14.5.5 libman.json文件说明 135
14.5.6 在网站中自定义CSS样式表 136
14.6 在ASP.NET Core应用程序中使用Bootstrap 136
14.6.1 Details.cshtml视图优化 137
14.6.2 Index.cshtml视图优化 137
14.7 小结 139
第 15章 ASP.NET Core中的TagHelper 140
15.1 导入内置TagHelper 140
15.1.1 使用TagHelper生成Link链接 140
15.1.2 TagHelper中的Link标签 141
15.2 为什么要使用TagHelper 141
15.3 Image TagHelper 144
15.3.1 浏览器缓存 145
15.3.2 禁用浏览器缓存 145
15.3.3 HTTP状态码中的200与302 146
15.3.4 ASP.NET Core中的Image TagHelper 146
15.3.5 验证Image TagHelper 147
15.4 ASP.NET Core中的Environment TagHelper 148
15.4.1 设置应用程序环境的名称 148
15.4.2 如果CDN “挂了”怎么办 149
15.5 使用Bootstrap给项目添加导航菜单 150
15.6 Form TagHelpers提交学生信息 153
15.6.1 场景描述 153
15.6.2 Form TagHelper 154
15.6.3 Input TagHelper 154
15.6.4 Label TagHelper 155
15.6.5 Select TagHelper 155
15.6.6 Create.cshtml中基本的HTML代码 156
15.6.7 Bootstrap优化后的Create.cshtml的代码 158
15.7 小结 159
第 16章 ASP.NET Core中的模型绑定与模型验证 160
16.1 ASP.NET Core中模型绑定的简单例子 160
16.2 在IStudentRepository接口中添加Add() 方法 162
16.2.1 在MockStudentRepository类中实现Add() 方法 163
16.2.2 HttpGet与HttpPost 163
16.2.3 运行结果 165
16.3 ASP.NET Core中的模型验证 166
16.3.1 模型验证示例 166
16.3.2 ModelState.IsValid属性验证 168
16.3.3 在视图中显示模型验证错误 168
16.3.4 自定义模型验证错误消息 169
16.3.5 ASP.NET Core内置模型验证属性 169
16.3.6 显示属性 169
16.3.7 使用多个模型验证属性 170
16.3.8 自定义模型验证错误的颜色 170
16.4 ASP.NET Core中的Select选择器验证 171
16.4.1 HTML页面中的选择列表 171
16.4.2 使选择列表成为必填 172
16.4.3 让选择列表成为真正的必需验证 173
16.5 深入了解依赖注入3种服务的不同 174
16.5.1 IStudentRepository接口 174
16.5.2 Student类 175
16.5.3 MockStudentRepository仓储服务 175
16.5.4 HomeController 176
16.5.5 创建学生信息 177
16.5.6 完善_ViewImports.cshtml 178
16.6 验证依赖注入服务 179
16.6.1 AddSingleton()方法 179
16.6.2 AddScoped()方法 180
16.6.3 AddTransient()方法 181
16.6.4 Scoped服务、 Transient服务与Singleton服务 181
16.7 小结 182
第 17章 EntityFramework Core数据访问与仓储模式 183
17.1 为什么要使用ORM 183
17.1.1 EF Core Code First模式 184
17.1.2 EF Core Database First模式 185
17.1.3 EF Core所支持的数据库 185
17.2 单层Web应用和多层Web应用的区别 186
17.2.1 单层Web应用 186
17.2.2 多层Web应用程序——三层架构 187
17.2.3 多层Web应用程序——领域驱动设计架构 188
17.3 Microsoft.AspNetCore.App包 190
17.4 安装Entity Framework Core 192
17.4.1 在类库项目中安装NuGet包 193
17.4.2 Entity Framework Core中的DbContext 194
17.4.3 在应用程序中使用DbContext 194
17.4.4 Entity Framework Core中的DbSet 195
17.5 在Entity Framework Core中使用SQL Server 195
17.5.1 AddDbContext()和AddDbContextPool()方法之间的区别 196
17.5.2 UseSqlServer()扩展方法 196
17.5.3 ASP.NET Core中的数据库连接字符串 196
17.6 ASP.NET Core中的仓储模式 197
17.6.1 仓储模式简介 197
17.6.2 仓储模式中的接口 198
17.6.3 修改IStudentRepository接口 198
17.6.4 仓储模式中的内存实现 199
17.6.5 Repository模式——SQL Server数据库实现 201
17.6.6 选择合适的仓储实现模式 202
17.6.7 仓储模式的优点 203
17.7 Entity Framework Core迁移功能 203
17.7.1 EF Core中的迁移 204
17.7.2 常用的Entity Framework Core迁移命令 205
17.7.3 在Entity Framework Core中创建迁移 205
17.7.4 在Entity Framework Core中更新数据库 206
17.7.5 Entity Framework Core中的种子数据 207
17.7.6 如何启用种子数据 207
17.7.7 更改现有的数据库种子数据 209
17.7.8 DbContext类保持“干净” 210
17.8 在ASP.NET Core中同步领域模型与数据库架构 211
17.8.1 给学生增加头像字段 211
17.8.2 Migrations文件夹中的文件说明 212
17.8.3 _EFMigrationsHistory表的使用 212
17.8.4 如何删除已应用的迁移记录 212
17.8.5 删除已应用于数据库的迁移 213
17.9 小结 213
第 18章 学生头像上传与信息修改 214
18.1 修改Student模型类 215
18.1.1 视图模型——StudentCreateViewModel 215
18.1.2 更新Create视图中的代码 216
18.1.3 更新Create()操作方法的代码 219
18.1.4 学生详情视图页面代码 220
18.1.5 学生列表视图页面代码 221
18.2 在ASP.NET Core MVC中完成上传多个文件 222
18.2.1 StudentCreateViewModel文件 223
18.2.2 更新Create视图的代码 223
18.2.3 修改Create()操作方法 226
18.3 ASP.NET Core中的学生编辑视图 228
18.3.1 导航到编辑视图 228
18.3.2 编辑视图模型 229
18.3.3 Edit() 操作方法 230
18.3.4 编辑视图页面 230
18.3.5 完成HttpPost的Edit()操作方法 232
18.4 枚举的扩展方法实现 235
18.5 小结 237
第 19章 404错误页与异常拦截 238
19.1 HTTP状态码中的4××和5×× 238
19.1.1 ASP.NET Core中的404错误 239
19.1.2 404错误信息的视图代码 239
19.2 统一处理ASP.NET Core中的404错误 240
19.2.1 404错误的类型 241
19.2.2 ASP.NET Core中的404错误示例 241
19.3 处理失败的HTTP状态码 242
19.3.1 UseStatusCodePages中间件 242
19.3.2 UseStatusCodePagesWithRedirects中间件 243
19.3.3 添加ErrorController 244
19.3.4 添加NotFound视图 245
19.4 UseStatusCodePagesWithRedirects与UseStatusCodePagesWithReExecute 245
19.4.1 UseStatusCodePagesWithRedirects中间件说明 246
19.4.2 UseStatusCodePagesWithRedirects请求处理流程 246
19.4.3 使用UseStatusCodePagesWithReExecute请求处理流程 247
19.5 ASP.NET Core中的全局异常处理 249
19.5.1 ASP.NET Core中的UseDeveloperExceptionPage中间件 249
19.5.2 ASP.NET Core中的非开发环境异常信息 250
19.5.3 ASP.NET Core中的异常处理 251
19.5.4 调整Edit()方法中的错误视图 253
19.6 小结 255
第 20章 ASP.NET Core中的日志记录 256
20.1 ASP.NET Core中的默认日志 256
20.2 ASP.NET Core中的日志记录提供程序 257
20.2.1 ASP.NET Core内置日志记录提供程序 257
20.2.2 ASP.NET Core的第三方日志记录提供程序 258
20.2.3 ASP.NET Core中默认的日志记录提供程序 258
20.2.4 appsettings.json文件中的LogLevel 259
20.3 在ASP.NET Core中实现记录异常信息 261
20.3.1 Error和NotFound视图修改 262
20.3.2 在ASP.NET Core中记录异常信息 263
20.3.3 在ASP.NET Core中使用NLog记录信息到文件中 267
20.3.4 在ASP.NET Core中使用NLog 267
20.4 在ASP.NET Core中LogLevel配置及过滤日志信息 270
20.4.1 日志等级LogLevel枚举 270
20.4.2 ILogger方法 271
20.4.3 在ASP.NET Core中使用日志过滤 272
20.4.4 按日志类别(Log Category)和日志记录提供程序进行日志筛选 275
20.4.5 特定环境变量中appsettings.json文件的LogLevel配置 277
20.5 小结 277
第三部分
第 21章 从零开始学ASP.NET Core Identity框架 280
21.1 ASP.NET Core Identity介绍 280
21.2 使用ASP.NET Core Identity注册新用户 283
21.2.1 RegisterViewModel视图模型 284
21.2.2 账户控制器 284
21.2.3 注册视图中的代码 285
21.2.4 添加注册按钮 286
21.3 UserManager和SignInManager服务 286
21.3.1 ASP.NET Core Identity中对密码复杂度的处理 288
21.3.2 ASP.NET Core Identity密码默认设置 289
21.3.3 覆盖ASP.NET Core身份中的密码默认设置 290
21.3.4 修改中文提示的错误信息 291
21.4 登录状态及注销功能的实现 294
21.5 ASP.NET Core Identity中的登录功能实现 295
21.5.1 LoginViewModel登录视图模型 295
21.5.2 登录视图的代码 296
21.5.3 AccountController中的Login()操作方法 297
21.5.4 会话Cookie与持久性Cookie 298
21.6 小结 299
第 22章 授权与验证的关系 300
22.1 ASP.NET Core中的Authorize属性 300
22.1.1 Authorize属性示例 300
22.1.2 ASP.NET Core中的AllowAnonymous属性 301
22.1.3 全局应用Authorize属性 302
22.2 登录后重定向到指定URL 303
22.2.1 ASP.NET Core中的ReturnUrl 303
22.2.2 ReturnUrl查询字符串示例 303
22.2.3 登录后重定向到ReturnUrl 304
22.3 开放式重定向攻击 305
22.3.1 什么是开放式重定向漏洞 305
22.3.2 开放式重定向漏洞示例 305
22.4 ASP.NET Core中的客户端验证 307
22.4.1 服务器端验证示例 307
22.4.2 客户端验证 308
22.4.3 什么是客户端隐式验证 310
22.4.4 客户端验证如何在ASP.NET Core中工作 311
22.4.5 隐式验证在ASP.NET Core中失效 312
22.5 在ASP.NET Core中进行远程验证 312
22.5.1 远程验证示例 313
22.5.2 ASP.NET Core远程属性 314
22.5.3 ASP.NET Core Ajax失效 315
22.6 ASP.NET Core中的自定义验证属性 315
22.6.1 自定义验证属性示例 315
22.6.2 在ASP.NET Core中使用自定义验证属性 316
22.7 小结 317
第 23章 角色管理与用户扩展 318
23.1 扩展IdentityUser类 319
23.1.1 修改AppDbContext中的参数 321
23.1.2 生成新迁移记录向AspNetUsers表中添加字段 321
23.1.3 在AspNetUsers表中保存自定义数据 322
23.1.4 AccountController类中Register()操作方法的修改 323
23.1.5 AllowAnonymous匿名属性的使用 324
23.2 ASP.NET Core中的角色管理 324
23.2.1 ASP.NET Core中的RoleManager 324
23.2.2 在AdminController中添加创建新角色的代码 325
23.2.3 创建角色视图模型 326
23.2.4 创建角色视图 326
23.3 在ASP.NET Core中显示所有角色列表 328
23.4 编辑ASP.NET Core中的角色 331
23.4.1 编辑角色视图模型 332
23.4.2 编辑角色操作方法 333
23.4.3 编辑角色视图 335
23.5 角色管理中的用户关联关系 338
23.5.1 Identity中的AspNetUserRoles数据库表关联关系 339
23.5.2 EditUsersInRole的HttpGet操作方法 339
23.5.3 EditUsersInRole的HttpPost操作方法 340
23.5.4 EditUsersInRole视图 341
23.6 小结 343
第 24章 角色授权与用户管理 344
24.1 基于角色的授权 344
24.1.1 授权属性的多个实例 345
24.1.2 基于角色授权的控制器操作方法 345
24.2 添加授权中间件UseAuthorization 346
24.3 在菜单栏上显示或隐藏管理 347
24.4 ASP.NET Core Identity中的拒绝访问功能 348
24.4.1 AccessDenied()操作方法 348
24.4.2 AccessDenied视图代码 349
24.5 获取Identity中的用户列表 349
24.5.1 UserManager服务的用户访问 350
24.5.2 ASP.NET Core列表用户视图 351
24.5.3 管理导航菜单 353
24.5.4 修改Register()方法 354
24.5.5 下拉菜单功能失效 355
24.6 编辑Identity中的用户 355
24.6.1 编辑用户视图 355
24.6.2 EditUser()的操作方法 356
24.6.3 EditUser视图文件 358
24.7 NotFound视图异常 360
24.8 Identity中删除的用户功能 362
24.8.1 使用GET请求删除数据 362
24.8.2 使用POST请求删除数据 362
24.8.3 DeleteUser()方法 363
24.9 ASP.NET Core中的确认删除功能 364
24.9.1 浏览器确认对话框 364
24.9.2 是和否删除按钮 364
24.9.3 将confirmDelete()方法添加到视图中 366
24.10 删除ASP.NET CoreIdentity中的角色 367
24.11 小结 369
第 25章 EF Core中的数据完整性约束 370
25.1 EF Core中的数据完整性约束 370
25.2 优化生产环境中的自定义错误视图 374
25.2.1 ErrorController类 376
25.2.2 优化Error.cshtml 376
25.3 小结 378
第 26章 ASP.NET Core中的声明授权 379
26.1 Identity中的用户角色 379
26.1.1 视图模型 380
26.1.2 ManageUserRoles()方法 380
26.1.3 ManageUserRoles视图文件 382
26.2 启用MARS与模型绑定失效 383
26.2.1 为什么不使用foreach 384
26.2.2 for循环与foreach循环的异同点 387
26.3 声明授权 388
26.3.1 ClaimsStore与UserClaimsViewModel类 388
26.3.2 ManageUserClaims()操作方法 389
26.3.3 ManageUserClaims视图文件 391
26.4 小结 393
第 27章 RBAC与CABC 394
27.1 RBAC 394
27.2 CBAC 395
27.3 角色与策略的结合 396
27.4 在MVC视图中进行角色与声明授权 397
27.5 AccessDenied视图的路由配置修改 399
27.6 策略授权中的ClaimType和ClaimValue 402
27.7 使用委托创建自定义策略授权 404
27.7.1 自定义复杂授权需求 406
27.7.2 自定义授权需求和处理程序 407
27.7.3 自定义需求的授权处理程序示例 408
27.7.4 多个自定义授权处理程序 411
27.8 小结 413
第 28章 Identity的账户中心的设计 414
28.1 第三方登录身份提供商 414
28.1.1 第三方登录身份提供商如何在ASP.NET Core中工作 415
28.1.2 创建Azure OAuth凭据–——客户端ID和客户端密钥 416
28.1.3 在ASP.NET Core中启用Microsoft身份验证 418
28.1.4 集成GitHub身份验证登录 425
28.2 用户机密 429
28.3 验证账户信息安全 430
28.3.1 验证电子邮箱的好处 431
28.3.2 阻止登录未验证的用户登录 431
28.3.3 电子邮箱确认令牌 435
28.3.4 第三方登录的电子邮箱确认令牌 439
28.3.5 激活用户邮箱 442
28.4 忘记密码功能 444
28.5 重置密码功能 446
28.6 小结 449
第 29章 解析部分ASP.NET Core Identity源代码 450
29.1 解析ASP.NET Core Identity中Token的生成与验证 450
29.2 自定义令牌类型及令牌有效期 454
29.3 ASP.NET Core中Data Protection的加密和解密示例 456
29.4 在ASP.NET Core中添加更改密码功能 461
29.5 为第三方账户添加密码 464
29.6 ASP.NET Core中的账户锁定 468
29.7 小结 472
第四部分
第30章 架构 474
30.1 架构简介 474
30.2 学校管理系统架构设计 475
30.3 EntityFramework Core中的实体关系 476
30.4 当前架构 480
30.5 小结 481
第31章 仓储模式的最佳实践 482
31.1 泛型仓储的实现 482
31.2 异步编码与同步编码 483
31.3 IRepository接口的设计实现 484
31.4 RepositoryBase仓储代码的实现 489
31.5 小结 495
第32章 重构学生管理功能 496
32.1 修改HomeController中的代码 496
32.2 学生列表排序功能 505
32.3 模糊查询 507
32.4 一个简单分页的实现 509
32.5 小结 514
第33章 课程列表与分组统计功能 515
33.1 泛型分页 515
33.2 迁移数据信息 521
33.3 课程列表 526
33.4 分部视图 530
33.5 学生统计信息 532
33.6 Razor条件运行时编译 534
33.7 小结 535
第34章 复杂数据类型及自动依赖注入 536
34.1 创建相关实体信息 537
34.1.1 修改Course实体信息 538
34.1.2 创建学院与调整学生课程信息 539
34.2 更新数据库上下文及初始化内容 542
34.3 服务之间的自动注册 552
34.4 小结 555
第35章 课程与教师的CRUD 556
35.1 EF Core中预加载的使用 556
35.2 较为复杂的预加载的使用 558
35.3 编辑课程功能 569
35.3.1 编辑课程信息 572
35.3.2 课程信息的详情页 575
35.3.3 删除课程信息 577
35.4 编辑教师功能 578
35.4.1 添加教师信息 583
35.4.2 删除教师信息 586
35.5 优化目录结构 587
35.6 小结 588
第36章 处理并发冲突 589
36.1 并发冲突 589
36.1.1 悲观并发(悲观锁) 590
36.1.2 乐观并发(乐观锁) 591
36.2 添加Department的相关类 591
36.2.1 添加DepartmentsService 592
36.2.2 学院列表功能 593
36.2.3 添加详情视图 597
36.2.4 编辑学院信息功能 602
36.3 EF Core中的并发控制 605
36.4 小结 609
第37章 EF Core中的继承与原生SQL语句使用 610
37.1 继承 610
37.1.1 实现TPH继承 611
37.1.2 执行数据库迁移 613
37.2 执行原生SQL语句 614
37.2.1 DbSet.FromSqlRaw的使用 614
37.2.2 Database.ExecuteSqlComma的使用 615
37.2.3 执行原生SQL语句实现更新 616
37.3 小结 619
第38章 EF Core 中的数据加载与关系映射 620
38.1 EF Core中的数据加载 620
38.1.1 显式加载 620
38.1.2 延迟加载 621
38.1.3 3种加载形式的性能区别 623
38.2 Fluent API与数据注释 624
38.3 Entity Framework Core中的Code First关系映射约定 625
38.3.1 一对一关联关系 626
38.3.2 一对多关联关系 627
38.3.3 多对多关联关系 631
38.4 小结 632
第五部分
第39章 ASP.NET Core中的Web API 634
39.1 IoT与RESTful服务 634
39.2 添加Web API服务 635
39.3 安装Postman并调试Web API服务 639
39.3.1 测试POST请求 639
39.3.2 测试GET请求 640
39.3.3 测试PutTodoItem()方法 642
39.3.4 测试DeleteTodoItem()方法 644
39.3.5 404和400异常 644
39.4 图形可视化的Web API帮助页 646
39.4.1 Swagger/OpenAPI 646
39.4.2 Swashbuckle.AspNetCore入门 646
39.4.3 添加并配置Swagger中间件 647
39.4.4 获取swagger.json失败 648
39.4.5 调试Swagger UI 650
39.4.6 调用SwaggerGen API 654
39.5 小结 657
第40章 实践多层架构体系 658
40.1 领域驱动设计的分层结构 658
40.2 重构MockSchoolManagement项目 659
40.2.1 添加所需类库 661
40.2.2 添加依赖引用关系 662
40.3 迁移各类库 663
40.3.1 各个项目文件中的引用 664
40.3.2 类库效果图 665
40.3.3 多程序集的依赖注入 667
40.3.4 重新生成迁移记录及生成SQL脚本 668
40.4 小结 669
第41章 部署与发布 670
41.1 部署至IIS 670
41.1.1 IIS的安装和配置 670
41.1.2 安装ASP.NET Core托管模块 672
41.1.3 启用Web Deploy 672
41.1.4 创建IIS站点 675
41.1.5 使用Visual Studio将ASP.NET Core发布到IIS站点 676
41.2 部署至Ubuntu 678
41.2.1 Ubuntu中安装.NET Core 679
41.2.2 安装Nginx 679
41.2.3 编译与发布 680
41.3 在Docker中调试运行ASP.NET Core 682
41.3.1 安装Docker 682
41.3.2 添加Dockerfile文件 683
41.4 云原生Azure Web App 685
41.5 小结 689
第42章 ASP.NET Core 2.2到ASP. NET Core 3.1的迁移指南 690
42.1 升级至ASP.NET Core 3.1 690
42.1.1 修改项目启动 692
42.1.2 修改Startup 693
42.2 迁移升级后的看法 693
42.3 Visual Studio 2019插件推荐 694
42.4 小结 696

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索