ASP.NET MVC 5 高级编程
作者简介:
Jon Galloway是Microsoft的一位专注于ASP.NET MVC的技术传道者。 Brad Wilson拥有超过20年的专业软件开发经验,10年的Web开发经验。 K. Scott Allen是OdeToCode公司的创始人,为全球客户提供定制开发、顾问和指导服务。 David Matson是Microsoft的一名软件开发人员。他是MVC5和Web API 2产品团队的一员。
内容简介:
使用MVC 5创建动态的、数据驱动的网站 作为Microsoft备受欢迎的MVC技术的最新版本,MVC 5是一个成熟的Web应用程序框架,支持快速的、TDD友好的开发。MVC允许开发人员创建动态的、数据驱动的网站。这样的网站具有复杂的功能,如单页面应用程序、针对移动设备优化、适应性呈现等。《ASP.NET MVC 5高级编程(第5版)》还包括了MVC 5.1和MVC 5.2中的一些新特性。通过采用分步骤讲解的方法,指导读者如何充分利用MVC。本书的作者不是Microsoft的ASP.NET MVC专家,就是ASP.NET MVC领域的智者,所以作为一本实用的教程,不但强化开发人员对概念的认识,也帮助开发人员创建自己的应用程序。 主要内容 ◆ 解释了ASP.NET MVC框架与其他“每个页面一个文件”的Web框架的区别 ◆ 介绍了控制器、视图、模型、表单、HTML辅助方法、数据注解和验证、成员资格、授权、安全性和路由 ◆ 新增了对One ASP.NET项目模板、ASP.NET Identity、Bootstrap和特性路由的介绍 ◆ 探讨了一些重要主题,如Ajax、NuGet、依赖注入、单元测试和MVC扩展 ◆ 提供了分步骤指导、真实案例以及众多代码示例,帮助读者从入门阶段进阶
目录:
第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 5的发展历程 3 1.1.5 ASP.NET MVC 4概述 6 1.1.6 开源发布 9 1.2 ASP.NET MVC 5概述 9 1.2.1 One ASP.NET 10 1.2.2 新的Web项目体验 10 1.2.3 ASP.NET Identity 10 1.2.4 Bootstrap模板 11 1.2.5 特性路由 13 1.2.6 ASP.NET基架 13 1.2.7 身份验证过滤器 13 1.2.8 过滤器重写 13 1.3 安装MVC 5和创建应用程序 13 1.3.1 ASP.NET MVC 5的软件需求 13 1.3.2 安装ASP.NET MVC 5 14 1.3.3 创建ASP.NET MVC 5应用程序 14 1.3.4 New ASP.NET Project对话框 15 1.4 ASP.NET MVC应用程序的结构 19 1.4.1 ASP.NET MVC和约定 21 1.4.2 约定优于配置 21 1.4.3 约定简化通信 22 1.5 小结 22 第2章 控制器 23 2.1 控制器的角色 23 2.2 示例应用程序:MVC Music Store 25 2.3 控制器基础 28 2.3.1 简单示例:Home Controller 28 2.3.2 创建第一个控制器 30 2.3.3 控制器操作中的参数 33 2.4 小结 35 第3章 视图 36 3.1 视图的作用 37 3.2 视图的基础知识 37 3.3 理解视图约定 40 3.4 强类型视图 41 3.4.1 ViewBag的不足 41 3.4.2 理解ViewBag、ViewData和ViewDataDictionary 43 3.5 视图模型 44 3.6 添加视图 45 3.7 Razor视图引擎 47 3.7.1 Razor的概念 48 3.7.2 代码表达式 49 3.7.3 HTML编码 50 3.7.4 代码块 52 3.7.5 Razor语法示例 52 3.7.6 布局 54 3.7.7 ViewStart 56 3.8 指定部分视图 57 3.9 小结 58 第4章 模型 59 4.1 为MVC Music Store建模 60 4.2 为商店管理器构造基架 63 4.2.1 基架的含义 63 4.2.2 基架和实体框架 64 4.2.3 执行基架模板 66 4.2.4 执行基架代码 71 4.3 编辑专辑 75 4.3.1 创建编辑专辑的资源 76 4.3.2 响应编辑时的POST请求 79 4.4 模型绑定 80 4.4.1 DefaultModelBinder 81 4.4.2 显式模型绑定 82 4.5 小结 84 第5章 表单和HTML辅助方法 85 5.1 表单的使用 85 5.1.1 action和method特性 86 5.1.2 GET方法还是POST方法 86 5.2 HTML辅助方法 89 5.2.1 自动编码 90 5.2.2 辅助方法的使用 91 5.2.3 HTML辅助方法的工作原理 91 5.2.4 设置专辑编辑表单 92 5.2.5 添加输入元素 93 5.2.6 辅助方法、模型和视图数据 98 5.2.7 强类型辅助方法 100 5.2.8 辅助方法和模型元数据 101 5.2.9 模板辅助方法 101 5.2.10 辅助方法和ModelState 102 5.3 其他输入辅助方法 103 5.3.1 Html.Hidden 103 5.3.2 Html.Password 103 5.3.3 Html.RadioButton 103 5.3.4 Html.CheckBox 104 5.4 渲染辅助方法 104 5.4.1 Html.ActionLink和Html.RouteLink 104 5.4.2 URL辅助方法 105 5.4.3 Html.Partial和Html.RenderPartial 106 5.4.4 Html.Action和Html.RenderAction 107 5.5 小结 108 第6章 数据注解和验证 109 6.1 为验证注解订单 110 6.1.1 验证注解的使用 112 6.1.2 自定义错误提示消息及其本地化 116 6.1.3 注解的后台原理 117 6.1.4 控制器操作和验证错误 118 6.2 自定义验证逻辑 120 6.2.1 自定义注解 120 6.2.2 IValidatableObject 123 6.3 显示和编辑注解 124 6.3.1 Display 124 6.3.2 ScaffoldColumn 125 6.3.3 DisplayFormat 125 6.3.4 ReadOnly 125 6.3.5 DataType 126 6.3.6 UIHint 126 6.3.7 HiddenInput 126 6.4 小结 126 第7章 成员资格、授权和安全性 127 7.1 安全性:无趣、但极其重要 127 7.2 使用Authorize特性登录 129 7.2.1 保护控制器操作 129 7.2.2 Authorize特性在表单身份验证和AccountController控制器中的用法 133 7.2.3 Windows Authentication 134 7.3 要求角色成员使用Authorize特性 137 7.4 扩展用户身份 138 7.4.1 存储额外的用户资料数据 139 7.4.2 持久化控制 139 7.4.3 管理用户和角色 139 7.5 通过OAuth和OpenID的外部登录 139 7.5.1 注册外部登录提供器 141 7.5.2 配置OpenID提供器 142 7.5.3 配置OAuth提供器 144 7.5.4 外部登录的安全性 144 7.6 Web应用程序中的安全向量 145 7.6.1 威胁:跨站脚本 146 7.6.2 威胁:跨站请求伪造 154 7.6.3 威胁:cookie盗窃 158 7.6.4 威胁:重复提交 160 7.6.5 威胁:开放重定向 162 7.7 适当的错误报告和堆栈跟踪 166 7.7.1 使用配置转换 167 7.7.2 在生产环境中使用Retail部署配置 168 7.7.3 使用专门的错误日志系统 168 7.8 安全回顾和有用资源 168 7.9 小结 169 第8章 Ajax 171 8.1 jQuery 172 8.1.1 jQuery的特性 172 8.1.2 非侵入式JavaScript 175 8.1.3 jQuery的用法 176 8.2 Ajax辅助方法 181 8.2.1 在项目中添加非侵入式Ajax脚本 182 8.2.2 Ajax的ActionLink方法 183 8.2.3 HTML 5特性 185 8.2.4 Ajax表单 186 8.3 客户端验证 188 8.3.1 jQuery验证 188 8.3.2 自定义验证 191 8.4 辅助方法之外 196 8.4.1 jQuery UI 196 8.4.2 使用jQuery UI实现自动完成部件 197 8.4.3 JSON和客户端模板 200 8.4.4 Bootstrap插件 204 8.5 提高Ajax性能 206 8.5.1 使用内容分发网络 206 8.5.2 脚本优化 206 8.5.3 捆绑和微小 207 8.6 小结 208 第9章 路由 209 9.1 统一资源定位符——URL 209 9.2 路由概述 210 9.2.1 对比路由和URL重写 211 9.2.2 路由方法 211 9.2.3 定义特性路由 212 9.2.4 定义传统路由 221 9.2.5 选择特性路由还是传统路由 229 9.2.6 路由命名 229 9.2.7 MVC区域 231 9.2.8 catch-all参数 233 9.2.9 段中的多个路由参数 233 9.2.10 StopRoutingHandler和IgnoreRoute 234 9.2.11 路由的调试 235 9.3 揭秘路由如何生成URL 236 9.3.1 URL生成的高层次概述 237 9.3.2 URL生成详解 237 9.3.3 外界路由值 238 9.3.4 Route类生成URL的若干示例 240 9.4 揭秘路由如何绑定到操作 241 9.4.1 高层次请求的路由管道 241 9.4.2 路由数据 242 9.5 自定义路由约束 242 9.6 Web Forms和路由机制 243 9.7 小结 244 第10章 NuGet 245 10.1 NuGet概述 245 10.2 以包的形式添加库 246 10.2.1 查找包 247 10.2.2 安装包 248 10.2.3 更新包 251 10.2.4 包恢复 251 10.2.5 包管理器控制台的用法 252 10.3 创建包 254 10.3.1 打包项目 255 10.3.2 打包文件夹 256 10.3.3 配置文件和源代码转换 256 10.3.4 NuSpec文件 257 10.3.5 元数据 258 10.3.6 依赖库 259 10.3.7 指定要包含的文件 260 10.3.8 工具 260 10.3.9 框架和轮廓定位 263 10.3.10 预发布包 264 10.4 发布包 264 10.4.1 发布到NuGet.org 265 10.4.2 使用NuGet.exe 267 10.4.3 包浏览器的用法 268 10.5 小结 269 第11章 ASP.NET Web API 271 11.1 定义ASP.NET Web API 272 11.2 Web API入门 272 11.3 编写API控制器 273 11.3.1 检查示例ValuesController 273 11.3.2 异步设计: IHttpController 274 11.3.3 传入的操作参数 277 11.3.4 操作返回值、错误和异步 277 11.4 配置Web API 279 11.4.1 Web托管Web API的配置 279 11.4.2 自托管Web API的配置 280 11.5 向Web API添加路由 282 11.6 绑定参数 283 11.7 过滤请求 285 11.8 启用依赖注入 286 11.9 探索API编程 286 11.10 跟踪应用程序 287 11.11 Web API示例:ProductsController 287 11.12 小结 289 第12章 应用AngularJS构建单页面应用程序 290 12.1 理解和安装AngularJS 291 12.1.1 AngularJS简介 291 12.1.2 本章目标 291 12.1.3 入门 291 12.1.4 向网站中添加AngularJS 293 12.1.5 数据库设置 294 12.2 创建Web API 296 12.3 创建应用程序和模块 297 12.3.1 创建控制器、模型和视图 298 12.3.2 服务 300 12.3.3 路由 303 12.3.4 详细视图 305 12.3.5 自定义电影服务 306 12.3.6 删除电影 308 12.3.7 编辑和创建电影 310 12.4 小结 315 第13章 依赖注入 316 13.1 软件设计模式 316 13.1.1 设计模式——控制反转模式 317 13.1.2 设计模式——服务定位器 318 13.1.3 设计模式—— 依赖注入 322 13.2 MVC中的依赖解析 325 13.2.1 MVC中的单一注册服务 326 13.2.2 MVC中的复合注册服务 326 13.2.3 MVC中的任意对象 328 13.3 Web API中的依赖解析 330 13.3.1 Web API中的单一注册服务 330 13.3.2 Web API中的复合注册服务 331 13.3.3 Web API中的任意对象 332 13.3.4 对比MVC和Web API中的依赖解析器 332 13.4 小结 333 第14章 单元测试 334 14.1 单元测试和测试驱动开发的意义 334 14.1.1 单元测试的定义 335 14.1.2 测试驱动开发的定义 336 14.2 创建单元测试项目 339 14.2.1 检查默认单元测试 339 14.2.2 只测试自己编写的代码 340 14.3 单元测试用于ASP.NET MVC和ASP.NET Web API应用程序的技巧和窍门 341 14.3.1 控制器测试 341 14.3.2 路由测试 346 14.3.3 验证测试 349 14.4 小结 352 第15章 扩展ASP.NET MVC 353 15.1 模型扩展 354 15.1.1 把请求数据转换为模型 354 15.1.2 用元数据描述模型 359 15.1.3 验证模型 361 15.2 视图扩展 364 15.2.1 自定义视图引擎 364 15.2.2 编写HTML辅助方法 366 15.2.3 编写Razor辅助方法 367 15.3 控制器扩展 368 15.3.1 操作选择 368 15.3.2 操作过滤器 370 15.3.3 提供自定义结果 378 15.4 小结 379 第16章 高级主题 381 16.1 移动支持 381 16.1.1 适应性呈现 382 16.1.2 显示模式 386 16.2 高级Razor 388 16.2.1 模板化的Razor委托 388 16.2.2 视图编译 389 16.3 高级视图引擎 390 16.3.1 视图引擎配置 391 16.3.2 查找视图 392 16.3.3 视图本身 393 16.3.4 备用视图引擎 393 16.3.5 新视图引擎还是新ActionResult 395 16.4 高级基架 395 16.4.1 ASP.NET基架简介 395 16.4.2 自定义基架模板 395 16.4.3 自定义基架器 398 16.5 高级路由 398 16.5.1 RouteMagic 398 16.5.2 可编辑路由 399 16.6 高级模板 402 16.6.1 默认模板 403 16.6.2 自定义模板 406 16.7 高级控制器 408 16.7.1 定义控制器:IController接口 408 16.7.2 ControllerBase抽象基类 409 16.7.3 控制器类和操作 410 16.7.4 ActionResult 411 16.7.5 操作调用器 418 16.7.6 使用异步控制器操作 421 16.8 小结 426 第17章 ASP.NET MVC实战: 构建NuGet.org网站 427 17.1 源码与我们同在 428 17.2 WebActivator 430 17.3 ASP.NET动态数据 431 17.4 异常日志 433 17.5 性能分析 435 17.6 数据访问 437 17.7 EF基于代码迁移 438 17.8 使用Octopus Deploy进行部署 440 17.9 使用Fluent Automation自动进行浏览器测试 441 17.10 其他有用的NuGet包 441 17.10.1 WebBackgrounder 442 17.10.2 Lucene.NET 443 17.10.3 AnglicanGeek.MarkdownMailer 443 17.10.4 Ninject 443 17.11 小结 444 附录A ASP.NET MVC 5.1 445
评论