第Ⅰ部分 Alpine Ski House 5
第1章 一路走来 5
1.1 Active Server Pages(ASP) 6
1.2 ASP.NET 7
1.3 ASP.NET MVC 10
1.4 Web API 13
1.5 ASP.NET Core 14
1.6 本章小结 15
第2章 影响者 17
2.1 向后兼容性 18
2.2 Rails 18
2.3 Node.js 21
2.4 Angular和React 22
2.5 开源 23
2.6 OWIN 23
2.7 本章小结 24
第3章 模型、视图和控制器 25
3.1 MVC中的M、V和C 26
3.1.1 深入了解模型 26
3.1.2 视图 28
3.1.3 局部视图 28
3.1.4 控制器 29
3.2 MVC以外的内容 30
3.2.1 中间件 30
3.2.2 依赖注入 31
3.2.3 其他亮点 32
3.3 本章小结 32
第4章 定义项目范围 33
4.1 滑雪场 34
4.2 API接口 36
4.3 管理界面 37
4.4 综上所述 37
4.5 定义我们的领域模型 38
4.6 本章小结 39
第5章 生成 41
5.1 命令行生成 42
5.2 生成服务器 43
5.3 生成流水线 44
5.4 生成Alpine Ski House 46
5.5 本章小结 51
第6章 部署 53
6.1 选择Web服务器 54
6.2 Kestrel 54
6.3 反向代理 55
6.4 IIS 56
6.5 Nginx 58
6.6 发布 60
6.6.1 生成类型 61
6.6.2 生成安装包 62
6.6.3 关于Azure 63
6.6.4 Azure部署 65
6.7 容器部署 68
6.8 本章小结 68
第Ⅱ部分 迭代回顾:千里之行 71
第7章 使用MicrosoftAzure构建Web应用程序 71
7.1 平台即服务 72
7.1.1 平台服务 72
7.1.2 搭建、删除和重建你的服务 74
7.2 使用平台服务生成应用程序 75
7.2.1 创建一个存储账号 76
7.2.2 在BlobContainers中存储图片 77
7.2.3 使用存储队列 79
7.2.4 使用Azure WebJobs进行自动处理 79
7.3 扩展你的应用程序 81
7.3.1 多方位扩展 81
7.3.2 弹性扩展 81
7.3.3 扩展性上的考虑 83
7.4 本章小结 84
第8章 跨平台 85
8.1 在Ubuntu上运行 86
8.1.1 安装.NET Core 86
8.1.2 dotnet CLI 86
8.2 选择代码编辑器 89
8.3 Linux上的Alpine SkiHouse 89
8.4 .NET Core 92
8.5 本章小结 95
第9章 容器 97
9.1 可重复的环境 98
9.2 Docker 101
9.3 Windows容器 105
9.4 生产环境中的Docker 107
9.5 在云端 108
9.6 本章小结 109
第10章 Entity Framework Core 111
10.1 Entity Framework的基础知识 112
10.1.1 查询单条记录 114
10.1.2 查询多条记录 114
10.1.3 保存数据 115
10.1.4 跟踪修改 115
10.1.5 使用迁移创建和更新数据库 116
10.2 ApplicationDbContext 122
10.3 SkiCardContext 125
10.3.1 跨越上下文边界的关联 126
10.3.2 连接控制器 128
10.4 门票类型 133
10.5 门票与验证 135
10.6 本章小结 139
第11章 Razor视图 141
11.1 今天,开发人员如何创建网站 142
11.1.1 学习之前的成功经验 142
11.1.2 理解Razor的角色 143
11.2 掌握Razor的本质 143
11.2.1 幕后揭秘 143
11.2.2 使用Razor语法编写表达式 145
11.2.3 切换到代码 146
11.2.4 显式使用标记 147
11.2.5 Razor解析器的控制符速查表 148
11.3 使用更多C#功能 148
11.3.1 在视图中使用C#类型 148
11.3.2 定义模型 149
11.3.3 使用视图数据 149
11.4 使用布局 151
11.4.1 布局基础 151
11.4.2 在视图中包含部件 153
11.4.3 定义和使用局部视图 153
11.5 使用Razor高级功能增强视图 154
11.5.1 在视图中注入服务 154
11.5.2 使用标签助手 155
11.5.3 避免视图重复 158
11.6 使用其他视图引擎 159
11.7 本章小结 159
第12章 配置和日志 161
12.1 抛弃web.config 162
12.1.1 配置你的应用程序 162
12.1.2 使用现成的配置提供程序 164
12.1.3 创建自定义配置提供程序 165
12.1.4 使用选项模式 167
12.2 作为一等公民的日志 168
12.2.1 创建清晰明确的日志 169
12.2.2 关于异常信息的设置 170
12.2.3 作为部署策略的日志记录 171
12.2.4 ASP.NET Core中的日志级别 171
12.2.5 使用日志作用域增强日志功能 174
12.2.6 使用结构化日志框架 176
12.2.7 日志即服务(Loggingas aService) 178
12.3 本章小结 179
第Ⅲ部分 迭代回顾:激流勇进 185
第13章 身份标识、安全与权限管理 185
13.1 纵深防御 185
13.1.1 内部威胁 186
13.1.2 外部威胁 187
13.2 用户密钥 187
13.3 ASP.NETCore MVC中的标识管理 193
13.4 其他第三方认证提供程序 198
13.5 使用策略进行授权 202
13.5.1 全局应用策略 202
13.5.2 为选择的用户定义策略 202
13.5.3 自定义授权策略 204
13.5.4 保护资源 205
13.5.5 跨域资源共享(CORS) 208
13.6 本章小结 209
第14章 依赖注入 211
14.1 什么是依赖注入 212
14.1.1 手工解析依赖 212
14.1.2 使用服务容器解析依赖 213
14.2 ASP.NET Core中的依赖注入 214
14.2.1 使用内置容器 215
14.2.2 使用第三方容器 217
14.3 本章小结 219
第15章 JavaScript的地位 221
15.1 编写优雅的JavaScript 222
15.2 我们是否需要JavaScript 223
15.3 组织 223
15.4 是否要实现单页面应用(SPA) 224
15.5 构建JavaScript 225
15.5.1 Bundler&Minifier 225
15.5.2 Grunt 227
15.5.3 gulp 228
15.5.4 WebPack 230
15.5.5 哪个工具更适合我 232
15.6 TypeScript 232
15.6.1 ES2015到ES5的编译器 233
15.6.2 类型系统 234
15.7 模块加载 236
15.8 选择一个框架 237
15.9 本章小结 238
第16章 依赖项管理 241
16.1 NuGet 242
16.2 npm 244
16.2.1 添加依赖项 245
16.2.2 使用npm模块 245
16.2.3 与Visual Studio的集成 246
16.3 Yarn 247
16.4 Bower 249
16.4.1 添加依赖项 250
16.4.2 引用Bower程序包中的资源 250
16.5 本章小结 251
第17章 前端与样式 253
17.1 使用样式表构建网站 254
17.1.1 回首往事 254
17.1.2 创建自己的样式表 256
17.2 使样式更时髦 257
17.2.1 SCSS基础 258
17.2.2 创建Mixin 262
17.2.3 组合Mixin和指令 263
17.3 建立开发工作流 263
17.3.1 使用命令行工具 264
17.3.2 结合VisualStudioCode 264
17.3.3 修改项目的生成任务 264
17.4 使用第三方框架 265
17.4.1 扩展CSS框架 266
17.4.2 自定义CSS框架的基本面 266
17.4.3 在自定义样式表中利用CSS框架 267
17.4.4 CSS框架的替代品 268
17.5 本章小结 268
第18章 缓存 269
18.1 缓存控制(Cache-Control)头 270
18.2 使用Data-Cache 273
18.2.1 内存缓存 273
18.2.2 分布式缓存 274
18.3 缓存的限度 276
18.4 本章小结 276
第Ⅳ部分 迭代回顾:最后冲刺 279
第19章 可重用组件 279
19.1 标签助手 280
19.1.1 一个标签助手的组成部分 280
19.1.2 Script/Link/Environment标签助手 280
19.1.3 cache标签助手 282
19.1.4 创建标签助手 283
19.2 视图组件 286
19.2.1 调用视图组件 287
19.2.2 联系客户服务视图组件 287
19.3 局部视图 289
19.4 本章小结 290
第20章 测试 291
20.1 单元测试 291
20.1.1 xUnit 292
20.1.2 JavaScript测试 304
20.2 其他测试类型 308
20.3 本章小结 308
第21章 可扩展性 309
21.1 约定 310
21.2 中间件 312
21.2.1 配置管道 312
21.2.2 编写自己的中间件 314
21.2.3 管道分支 315
21.3 加载外部的控制器和视图 316
21.3.1 从外部项目中加载视图 317
21.3.2 从外部程序集中加载控制器 317
21.4 路由 318
21.4.1 特性路由 319
21.4.2 高级路由 320
21.5 dotnet工具 320
21.6 JavaScript服务和同构应用程序 321
21.6.1 同构应用程序 321
21.6.2 Node服务 322
21.7 本章小结 322
第22章 国际化 323
22.1 可本地化的文本 325
22.1.1 字符串本地化 325
22.1.2 视图本地化 328
22.1.3 数据修饰特性 328
22.1.4 共享资源文件 329
22.2 设置当前的区域性 330
22.3 本章小结 333
第23章 重构,改善代码质量 335
23.1 什么是重构 336
23.2 测量质量 337
23.3 寻找重构时机 338
23.4 安全重构 339
23.5 数据驱动修改 346
23.6 代码清理示例 346
23.7 工具来相助 350
23.8 收获品质 351
23.9 本章小结 351
第24章 组织代码 353
24.1 仓库结构 354
24.2 源代码内的结构 354
24.3 平行结构 355
24.4 MediatR 356
24.4.1 消息模式简介 356
24.4.2 实现中介者模式 357
24.5 区域 360
24.6 本章小结 361
后记 363