第1章 入门 1
1.1 ASP.NET MVC简介 1
1.1.1 ASP.NET MVC如何适应
ASP.NET 1
1.1.2 MVC模式简介 2
1.1.3 MVC在Web框架中的应用 2
1.1.4 ASP.NET MVC 4的
发展历程 3
1.1.5 ASP.NET MVC 4概述 9
1.1.6 ASP.NET Web API 10
1.1.7 增强的默认项目模板 11
1.1.8 使用jQuery Mobile的
移动项目模板 12
1.1.9 显示模式 13
1.1.10 捆绑和微小框架 13
1.1.11 包含开源库 14
1.1.12 其他功能 14
1.1.13 开源发布 16
1.2 创建ASP.NET MVC 4
应用程序 16
1.2.1 创建ASP.NET MVC 4
应用程序的软件要求 16
1.2.2 安装ASP.NET MVC 4 17
1.2.3 创建ASP.NET MVC 4
应用程序 18
1.2.4 New ASP.NET MVC 4
Project对话框 19
1.3 ASP.NET MVC应用程序的
结构 23
1.4 小结 27
第2章 控制器 29
2.1 控制器的角色 29
2.2 示例应用程序:
MVC Music Store 31
2.3 控制器基础 33
2.3.1 简单示例:Home Controller 34
2.3.2 创建第一个控制器 36
2.3.3 控制器操作中的参数 39
2.4 小结 41
第3章 视图 43
3.1 视图的作用 44
3.2 指定视图 45
3.3 强类型视图 47
3.4 视图模型 49
3.5 添加视图 50
3.6 Razor视图引擎 53
3.6.1 Razor的概念 53
3.6.2 代码表达式 54
3.6.3 HTML编码 56
3.6.4 代码块 58
3.6.5 Razor语法示例 59
3.6.6 布局 61
3.6.7 ViewStart 64
3.7 指定部分视图 64
3.8 小结 65
第4章 模型 67
4.1 为MVC Music Store建模 67
4.2 为商店管理器构造基架 70
4.2.1 基架的含义 70
4.2.2 基架和实体框架 72
4.2.3 执行基架模板 74
4.2.4 执行基架代码 77
4.3 编辑专辑 81
4.3.1 创建编辑专辑的资源 82
4.3.2 响应编辑时的POST请求 84
4.4 模型绑定 86
4.4.1 DefaultModelBinder 87
4.4.2 显式模型绑定 88
4.5 小结 89
第5章 表单和HTML辅助方法 91
5.1 表单的使用 91
5.1.1 action和method特性 92
5.1.2 GET方法还是POST方法 92
5.2 HTML辅助方法 96
5.2.1 自动编码 96
5.2.2 辅助方法的使用 97
5.2.3 HTML辅助方法的
工作原理 98
5.2.4 设置专辑编辑表单 98
5.2.5 添加输入元素 100
5.2.6 辅助方法、模型和
视图数据 104
5.2.7 强类型辅助方法 106
5.2.8 辅助方法和模型元数据 107
5.2.9 模板辅助方法 107
5.2.10 辅助方法和ModelState 108
5.3 其他输入辅助方法 109
5.3.1 Html.Hidden 109
5.3.2 Html.Password 109
5.3.3 Html.RadioButton 109
5.3.4 Html.CheckBox 110
5.4 渲染辅助方法 110
5.4.1 Html.ActionLink和
Html.RouteLink 110
5.4.2 URL辅助方法 111
5.4.3 Html.Partial和
Html.RenderPartial 112
5.4.4 Html.Action和
Html.RenderAction 113
5.5 小结 115
第6章 数据注解和验证 117
6.1 为验证注解订单 118
6.1.1 验证注解的使用 119
6.1.2 自定义错误提示消息及其
本地化 123
6.1.3 注解的后台原理 124
6.1.4 控制器操作和验证错误 125
6.2 自定义验证逻辑 127
6.2.1 自定义注解 127
6.2.2 IValidatableObject 130
6.3 显示和编辑注解 131
6.3.1 Display 131
6.3.2 ScaffoldColumn 132
6.3.3 DisplayFormat 132
6.3.4 ReadOnly 133
6.3.5 DataType 133
6.3.6 UIHint 134
6.3.7 HiddenInput 134
6.4 小结 134
第7章 成员资格、授权和安全性 135
7.1 使用Authorize特性登录 137
7.1.1 保护控制器操作 137
7.1.2 Authorize特性在表单身份
验证和AccountController
控制器中的用法 141
7.1.3 Intranet Application模板中
的Windows Authentication 142
7.1.4 整个控制器的安全性 143
7.1.5 使用全局授权过滤器保障
整个应用程序安全 144
7.2 要求角色成员使用Authorize
特性 145
7.3 扩展角色和成员 146
7.4 通过OAuth和OpenID的
外部登录 146
7.4.1 注册外部登录提供器 148
7.4.2 配置OpenID提供器 148
7.4.3 配置OAuth提供器 151
7.4.4 外部登录的安全性 152
7.5 Web应用程序中的安全向量 153
7.5.1 威胁:跨站脚本 153
7.5.2 威胁:跨站请求伪造 163
7.5.3 威胁:cookie盗窃 167
7.5.4 威胁:重复提交 169
7.5.5 威胁:开放重定向 171
7.6 适当的错误报告和堆栈跟踪 179
7.6.1 使用配置转换 180
7.6.2 在生产环境中使用Retail
部署配置 181
7.6.3 使用专门的错误日志系统 181
7.7 安全回顾和有用资源 182
7.8 小结 182
第8章 Ajax 185
8.1 jQuery 185
8.1.1 jQuery的特性 186
8.1.2 非侵入式JavaScript 189
8.1.3 jQuery的用法 190
8.2 Ajax辅助方法 193
8.2.1 Ajax的ActionLink方法 193
8.2.2 HTML 5特性 195
8.2.3 Ajax表单 196
8.3 客户端验证 198
8.3.1 jQuery验证 198
8.3.2 自定义验证 200
8.4 辅助方法之外 204
8.4.1 jQuery UI 204
8.4.2 使用jQuery UI实现自动
完成部件 205
8.4.3 JSON和客户端模板 208
8.5 提高Ajax性能 213
8.5.1 使用内容分发网络 213
8.5.2 脚本优化 214
8.5.3 捆绑和微小 214
8.6 小结 215
第9章 路由 217
9.1 统一资源定位符——URL 218
9.2 路由概述 219
9.2.1 对比路由和URL重写 219
9.2.2 路由的定义 220
9.2.3 路由命名 227
9.2.4 MVC区域 229
9.2.5 Catch-All参数 230
9.2.6 段中的多个URL参数 231
9.2.7 StopRoutingHandler和
IgnoreRoute 232
9.2.8 路由的调试 233
9.3 揭秘路由如何生成URL 234
9.3.1 URL生成的高层次概述 235
9.3.2 URL生成详解 235
9.3.3 外界路由值 237
9.3.4 Route类生成URL的若干
示例 239
9.4 揭秘路由如何绑定到操作 240
9.4.1 高层次请求的路由管道 240
9.4.2 路由数据 241
9.5 自定义路由约束 241
9.6 Web Forms和路由机制 242
9.7 小结 243
第10章 NuGet 245
10.1 NuGet概述 245
10.2 NuGet安装 246
10.3 以包的形式添加库 248
10.3.1 查找包 249
10.3.2 安装包 250
10.3.3 更新包 253
10.3.4 最近包 254
10.3.5 包恢复 254
10.3.6 包管理器控制台的用法 255
10.4 创建包 258
10.4.1 打包项目 258
10.4.2 打包文件夹 259
10.4.3 NuSpec文件 259
10.4.4 元数据 260
10.4.5 依赖库 261
10.4.6 指定要包含的文件 262
10.4.7 工具 263
10.4.8 框架和轮廓定位 266
10.4.9 预发布包 267
10.5 发布包 267
10.5.1 发布到NuGet.org 267
10.5.2 使用NuGet.exe 269
10.5.3 包浏览器的用法 271
10.6 小结 272
第11章 ASP.NET Web API 273
11.1 定义ASP.NET Web API 274
11.2 Web API入门 274
11.3 编写API控制器 275
11.3.1 检查示例
ValuesController 275
11.3.2 异步设计:
IHttpController 277
11.3.3 传入的操作参数 278
11.3.4 操作返回值、错误和
异步 278
11.4 配置Web API 279
11.4.1 Web托管Web API的
配置 279
11.4.2 自托管Web API的
配置 280
11.4.3 第三方托管配置 281
11.5 向Web API添加路由 281
11.6 绑定参数 282
11.7 过滤请求 284
11.8 启用依赖注入 285
11.9 探索API编程 286
11.10 跟踪应用程序 287
11.11 Web API示例:
ProductsController 287
11.12 小结 290
第12章 依赖注入 291
12.1 软件设计模式 291
12.1.1 设计模式——
控制反转模式 292
12.1.2 设计模式——
服务定位器 294
12.1.3 设计模式—— 依赖注入 298
12.2 MVC中的依赖解析 300
12.2.1 单一注册服务 302
12.2.2 复合注册服务 302
12.2.3 MVC中的任意对象 304
12.3 Web API中的依赖解析 306
12.3.1 Web API的单一注册
服务 307
12.3.2 Web API中的复合注册
服务 308
12.3.3 Web API中的任意对象 308
12.3.4 对比MVC和Web API
中的依赖解析器 309
12.4 小结 309
第13章 单元测试 311
13.1 单元测试和测试驱动开发
的意义 311
13.1.1 单元测试的定义 312
13.1.2 测试驱动开发的定义 313
13.2 创建单元测试项目 316
13.2.1 检查默认单元测试 317
13.2.2 只测试自己编写的代码 320
13.3 单元测试用于ASP.NET MVC
应用程序的技巧和窍门 321
13.3.1 控制器测试 321
13.3.2 路由测试 326
13.3.3 验证测试 328
13.4 小结 332
第14章 扩展ASP.NET MVC 333
14.1 模型扩展 334
14.1.1 把请求数据转化为模型 334
14.1.2 用元数据描述模型 339
14.1.3 验证模型 342
14.2 视图扩展 345
14.2.1 自定义视图引擎 345
14.2.2 编写HTML辅助方法 348
14.2.3 编写Razor辅助方法 349
14.3 控制器扩展 349
14.3.1 操作选择 349
14.3.2 操作过滤器 351
14.3.3 提供自定义结果 353
14.4 小结 354
第15章 高级主题 355
15.1 移动支持 355
15.1.1 适应性呈现 356
15.1.2 显示模式 360
15.1.3 Mobile Project模板 361
15.2 高级Razor 363
15.2.1 模板化的Razor委托 363
15.2.2 视图编译 364
15.3 高级视图引擎 365
15.3.1 视图引擎配置 366
15.3.2 查找视图 367
15.3.3 视图本身 368
15.3.4 备用视图引擎 369
15.3.5 新视图引擎还是新
ActionResult 370
15.4 高级基架 371
15.4.1 自定义T4代码模板 371
15.4.2 NuGet包
MvcScaffolding 372
15.4.3 更新的Add Controller
对话框选项 373
15.4.4 使用库模板 373
15.4.5 添加基架器 375
15.4.6 额外资源 375
15.5 高级路由 375
15.5.1 RouteMagic 376
15.5.2 可编辑路由 376
15.6 高级模板 380
15.6.1 默认模板 380
15.6.2 自定义模板 385
15.7 高级控制器 386
15.7.1 定义控制器:IController
接口 386
15.7.2 ControllerBase抽象基类 387
15.7.3 控制器类和操作 388
15.7.4 ActionResult 390
15.7.5 操作调用器 398
15.7.6 使用异步控制器操作 401
15.8 小结 408
第16章 ASP.NET MVC实战:
构建NuGet.org网站 409
16.1 源码与我们同在 410
16.2 WebActivator 411
16.3 ASP.NET动态数据 413
16.4 异常日志 416
16.5 性能分析 417
16.6 数据访问 420
16.7 EF基于代码迁移 421
16.8 成员资格 423
16.9 其他有用的NuGet包 424
16.9.1 T4MVC 424
16.9.2 WebBackgrounder 425
16.9.3 Lucene.NET 426
16.9.4 AnglicanGeek.Markdown-
Mailer 426
16.9.5 Ninject 426
16.10 小结 427
· · · · · · (
收起)