这不是一本循序渐进讲解ASP.NET如何使用的书,而是一本全面、深入探讨ASP.NET本质的书。本书从剖析网站应用程序的主机入手,依次深入分析了应用程序 HttpApplication、处理请求的7种武器、控件、数据绑定、模板、状态、自定义控件、MVC、异步、缓存、IIS与ASP.NET的底层原理以及它们与上层应用之间的关系。本书使用了大量的示例代码来演示技术之间的关系,针对开发中的典型问题,深入挖掘问题的根源,解决问题涉及的技术和解决方案,从而让读者能理论联系实际。
封面图
目录
- 前言
- 第1章网站应用程序 /1
- 1.1Web应用程序的简单回顾/2
- 1.1.1资源的地址—通用资源标识符 /2
- 1.1.2找到主机 /3
- 1.1.3HTTP协议 /4
- 1.2最简单的 Web 服务器 /6
- 1.2.1网络插座Socket /6
- 1.2.2基于 TcpListener 的 Web 服务器 /10
- 1.2.3基于 HttpListener 的 Web 服务器 /11
- 1.3进入 ASP.NET /13
- 1.3.1Web 应用程序域 /13
- 1.3.2不使用GAC 和bin 加载Web 应用程序域 /14
- 1.3.3默默无闻的工作者对象 /16
- 1.3.4Web 应用程序的运行时 /18
- 1.4对象化的HTTP /19
- 1.4.1请求参数的对象类型 HttpRequest /19
- 1.4.2处理回应的对象类型 HttpResponse /21
- 1.4.3辅助的常用工具类 HttpServerUtility /23
- 1.4.4编码与解码 /24
- 1.4.5浏览器类型 /26
- 1.5创建自定义的 ASP.NET 服务器 /28
- 1.5.1ASP.NET Web 服务器 /28
- 1.5.2监听程序 /28
- 1.5.3部署程序集 /29
- 1.5.4各种各样的Cassini /30
- 1.6本章小结 /30
- 第2章应用程序对象 /31
- 2.1请求的处理参数—上下文对象HttpContext /32
- 2.1.1常用成员/32
- 2.1.2底层方法/33
- 2.2应用程序对象 HttpApplication /33
- 2.2.1处理管道 /34
- 2.2.2HttpApplication 的处理管道 /38
- 2.2.3处理过程的简单介绍 /38
- 2.2.4HttpContext状态管理 /40
- 2.3处理 HttpApplication 的事件 /40
- 2.3.1通过 IHttpModule 创建 HttpApplication 的事件处理程序 /40
- 2.3.2注册 HttpModule /41
- 2.3.3不使用配置文件注册 HttpModule /42
- 2.3.4常见的 HttpModule/44
- 2.3.5HttpModule的事件 /46
- 2.3.6通过 global.asax 创建 HttpApplication 的事件处理程序 /46
- 2.3.7global.asax 中 HttpApplication 事件的自动注册 /48
- 2.3.8特殊的HttpApplication 事件处理 /48
- 2.4两个特殊的事件 /51
- 2.5大文件上传问题 /51
- 2.5.1文件上传的规范 /51
- 2.5.2ASP.NET 中的文件上传 /53
- 2.5.3文件上传的解决方案 /54
- 2.5.4通过HttpModule 接管请求参数 /54
- 2.5.5自定义的请求参数对象 /58
- 2.5.6读取上传数据的接口和实现 /62
- 2.5.7读取上传数据流 /65
- 2.5.8注册自定义的上传管理 /76
- 2.5.9使用自定义的上传管理 /77
- 2.6各种各样的文件上传 /78
- 2.6.1无刷新的上传: jQuery form /78
- 2.6.2基于客户端技术的上传进度:SWFUpload /79
- 2.7本章小结 /79
- 第3章HTTP请求处理程序/80
- 3.1处理程序 /81
- 3.1.1处理程序与 HttpApplication 的关系 /81
- 3.1.2处理程序接口 IHttpHandler 和 IHttpAsyncHandler /81
- 3.1.3在处理程序中使用会话 /82
- 3.1.4处理程序工厂 /83
- 3.1.5注册处理程序 /83
- 3.1.6使用处理程序生成验证码 /84
- 3.2一般处理程序 /86
- 3.2.1一般处理程序工厂 /87
- 3.2.2使用一般处理程序的场合 /87
- 3.2.3使用一般处理程序生成验证码图片 /87
- 3.2.4使用一般处理程序生成 JSON /87
- 3.3页面处理程序 /91
- 3.3.1页面处理程序工厂 /91
- 3.3.2创建页面处理程序 /92
- 3.3.3生成的代码 /93
- 3.3.4使用页面处理程序 /93
- 3.4Web 服务处理程序 /94
- 3.4.1Web 服务处理程序工厂 /94
- 3.4.2使用 Web 服务处理程序 /95
- 3.4.3Web 服务的常用标签 /96
- 3.4.4派生自 System.Web.Services.WebService 类的意义 /98
- 3.5MVC 处理程序 /98
- 3.5.1MVC 的路由接口 IRouteHandler /99
- 3.5.2自定义的 IRouteHandler /100
- 3.5.3注册路由处理程序 /101
- 3.5.4获取控制器的工厂接口 IControllerFactory /102
- 3.5.5MVC 请求的处理过程 /102
- 3.6资源处理程序 /103
- 3.6.1资源的处理程序配置 /103
- 3.6.2定义嵌入的资源 /103
- 3.6.3获取资源的地址 /104
- 3.6.4使用嵌入的资源 /104
- 3.7禁止的处理程序 /105
- 3.7.1配置禁止访问的资源 /105
- 3.7.2禁止访问 Excel /106
- 3.8虚拟路径提供器 /106
- 3.8.1定义虚拟路径提供器 /106
- 3.8.2注册虚拟路径提供器 /107
- 3.8.3压缩文件中的网站 /109
- 3.8.4SharpZipLib /114
- 3.9本章小结 /115
- 第4章ASP.NET中的线程与异步 /116
- 4.1线程基础 /117
- 4.1.1线程 /117
- 4.1.2自定义线程/118
- 4.1.3前台线程和后台线程 /119
- 4.1.4工作者线程和 I /O 线程/119
- 4.1.5线程池 /120
- 4.2.NET 中线程处理 /121
- 4.2.1线程的创建与启动 /121
- 4.2.2线程的状态 /123
- 4.2.3线程的执行上下文 /124
- 4.2.4异步编程模式APM /125
- 4.2.5基于事件的异步编程模式 EPM /128
- 4.2.6异步线程的状态与同步问题 /129
- 4.2.7处理管道中的异步问题 /133
- 4.3线程池 /137
- 4.3.1线程池的工作原理 /137
- 4.3.2将工作者线程加入线程池 /138
- 4.3.3将I /O 线程加入线程池 /138
- 4.4HttpApplication 中的异步线程 /139
- 4.4.1ASP.NET 中的线程池设置 /139
- 4.4.2异步步骤中的异步点 /141
- 4.4.3启动和完成异步步骤 /142
- 4.5异步处理程序 /142
- 4.5.1异步处理程序接口 /143
- 4.5.2在处理程序中异步调用 Web 服务 /143
- 4.6异步页面 /144
- 4.6.1页面异步任务的启动和完成 /144
- 4.6.2异步页面任务 /145
- 4.6.3异步页面中访问 Web 服务三种方式 /146
- 4.6.4实例—查询 QQ 在线状态 /148
- 4.7本章小结 /151
- 第5章页面即对象 /152
- 5.1流动的网页 /153
- 5.1.1字节流 /154
- 5.1.2字符编码 /155
- 5.1.3字符流 /156
- 5.1.4回应对象中的流 /158
- 5.1.5 专门输出 HTML 的字符流 /158
- 5.2控件—页面对象的基石 /160
- 5.2.1控件类 /160
- 5.2.2Render和RenderControl /161
- 5.2.3控件基类 /161
- 5.2.4组合模式 Composite /163
- 5.2.5ID 是一个问题 /165
- 5.3形形色色的控件 /171
- 5.3.1HTML 控件 /172
- 5.3.2Web 控件 /172
- 5.3.3WebPart 控件 /174
- 5.4控件实现的常用接口 /175
- 5.4.1生成和回发 /175
- 5.4.2控件的任意属性IAttributeAccessor /177
- 5.4.3数据的回发IPostBackDataHandler /177
- 5.4.4回发服务器端事件IPostBackEventHandler /178
- 5.5页面 /178
- 5.5.1页面与模板 /179
- 5.5.2母版页 /184
- 5.5.3页面就是一个处理程序 /185
- 5.5.4页面的事件处理管道 /185
- 5.5.5处理页面的事件 /187
- 5.6生成的过程 /188
- 5.6.1从模板到对象模型—BuildProvider /189
- 5.6.2从标记到控件—ControlBuilder /191
- 5.6.3进入生成阶段—ControlAdapter /191
- 5.6.4控件适配器—ControlAdapter /192
- 5.6.5Web控件适配器—WebControlAdapter /193
- 5.6.6页面适配器—PageAdapter /193
- 5.6.7使用 Adapter 定制表单的action /194
- 5.7自定义的 URL 重写 /195
- 5.7.1URL 重写的原理 /196
- 5.7.2使用 HttpModule 实现URL 重写 /196
- 5.7.3在配置文件中处理重写映射 /199
- 5.7.4无扩展名请求的处理问题 /204
- 5.8本章小结 /205
- 第6章状态 /206
- 6.1基本状态管理 /207
- 6.1.1隐藏域 /207
- 6.1.2Cookie /209
- 6.1.3URL /213
- 6.2视图状态ViewState /215
- 6.2.1序列化和反序列化 /215
- 6.2.2控制序列化 /217
- 6.2.3Base64 /218
- 6.2.4视图状态属性与 IStateManager 接口 /219
- 6.2.5保存和恢复的时间点 /221
- 6.2.6视图状态的序列化器 /223
- 6.2.7使用视图状态实现路径导航 /224
- 6.3控件状态 ControlState /228
- 6.4应用程序状态 Application /229
- 6.5会话状态 Session/229
- 6.5.1服务器端的 Session /230
- 6.5.2客户端的 SessionID /231
- 6.5.3Session 保存的位置 /233
- 6.5.4Session 的过期问题 /237
- 6.5.5压缩 Session 数据 /238
- 6.6HttpContext 状态 /238
- 6.7Cache /238
- 6.7.1缓存的原理 /238
- 6.7.2.NET 中的缓存管理实现 /239
- 6.7.3基于文件的缓存依赖 /241
- 6.7.4基于SQL的缓存依赖 /242
- 6.7.5组合的缓存依赖 /244
- 6.7.6删除所有的缓存项目 /246
- 6.7.7Web 服务器端的页面缓存 /247
- 6.7.8页面局部缓存 /249
- 6.7.9自定义的输出缓存提供器 /253
- 6.8Memcached /254
- 6.8.1下载和安装 Memcached /255
- 6.8.2在 ASP.NET 中访问 Memcached /256
- 6.9统计当前在线用户 /258
- 6.9.1Module 的处理 /258
- 6.9.2注册 Module /261
- 6.9.3Module 的配置参数 /262
- 6.9.4Module 的事件处理 /263
- 6.10本章小结 /263
- 第7章模板和数据绑定 /264
- 7.1页面与绑定 /265
- 7.1.1嵌入式代码块和表达式 /265
- 7.1.2绑定表达式 /267
- 7.1.3目标Target /269
- 7.1.4容器Container /269
- 7.1.5触发绑定事件的方法 DataBind /270
- 7.2控件内的模板 /271
- 7.2.1基于模板的控件 /271
- 7.2.2控件模板中的 Container /272
- 7.2.3DataBinder /272
- 7.2.4Page 中的 Eval /273
- 7.2.5在属性中使用绑定表达式 /273
- 7.3Repeater控件 /273
- 7.3.1数据的来源 DataSource/273
- 7.3.2Repeater 的基石—RepeaterItem/274
- 7.3.3绑定的过程 /275
- 7.3.4绑定中的事件 /276
- 7.3.5绑定的结果:Controls 集合和 Items 集合 /276
- 7.3.6回发中的 ItemCommand 事件 /277
- 7.4高级数据控件 /279
- 7.4.1唯一支持分栏的控件-DataList /279
- 7.4.2GridView /283
- 7.4.3ListView 和 DataPager /289
- 7.5数据源控件 /291
- 7.5.1反射 /292
- 7.5.2两种数据源 /293
- 7.5.3对象数据源 /297
- 7.5.4业务对象的标签 /298
- 7.5.5页面控件与数据源控件之间的关系 /300
- 7.5.6数据源控件相关的事件点 /303
- 7.5.7基于数据源控件的分页 /304
- 7.6本章小结 /305
- 第 8 章自定义控件 /306
- 8.1自定义控件的继承体系 /307
- 8.2自定义控件涉及的相关类型 /307
- 8.3自定义的带有上传进度的按钮 /308
- 8.3.1控件的工作原理 /308
- 8.3.2选择控件的基类 /309
- 8.3.3自定义的数据类型 /309
- 8.3.4状态的持久化 /310
- 8.3.5控件的属性 /312
- 8.3.6属性转换问题—TypeConverter /313
- 8.3.7编辑属性数据 UITypeEditor /320
- 8.3.8保存在 ASPX 中 /326
- 8.3.9设计器中的显示效果 /329
- 8.3.10工具栏中控件的图标 /330
- 8.3.11脚本嵌入和使用 /330
- 8.3.12控件的呈现 /332
- 8.3.13使用自定义控件 /334
- 8.4PetShop 中的自定义控件 /335
- 8.4.1基类 /335
- 8.4.2表格 /335
- 8.4.3处理当前页码参数 /336
- 8.4.4DataSource 属性 /336
- 8.4.5事件 /337
- 8.4.6生成 /338
- 8.5本章小结/342
- 第 9 章MVC /343
- 9.1ASP.NET MVC 是表现层的MVC /344
- 9.2在 HttpApplication 中的ASP.NET MVC /344
- 9.2.1创建 RouteTable /345
- 9.2.2UrlRoutingModule事件处理 /347
- 9.3从URL进入MVC之门 /348
- 9.3.1有意义的 URL /349
- 9.3.2在 IIS 6.0 和 IIS 7 中的配置 /349
- 9.3.3从URL到Route /350
- 9.3.4约束 /354
- 9.3.5Routing /356
- 9.3.6RequestContext 的前世今生 /357
- 9.3.7在 ASP.NET MVC 中防盗链 /358
- 9.4控制器 /361
- 9.4.1控制器工厂 /361
- 9.4.2使用自定义的控制器工厂 /362
- 9.4.3为 Controller 类传递构造函数的参数 /362
- 9.4.4Controller 的继承关系 /364
- 9.4.5Controller 中的状态管理 /365
- 9.4.6基于过滤器的扩展 /368
- 9.4.7选择 Action /372
- 9.5模型 /373
- 9.5.1绑定 Model /374
- 9.5.2简单参数和复杂参数 /374
- 9.5.3模型对象的元数据 /375
- 9.5.4Model 的验证 /377
- 9.5.5自定义Model 的验证 /379
- 9.6执行 Action/380
- 9.6.1各种ActionResult /380
- 9.6.2向视图传递数据 /381
- 9.7视图 /382
- 9.7.1视图引擎 /382
- 9.7.2经典视图—ViewPage /383
- 9.7.3视图引擎—Razor /384
- 9.8本章小结 /384
- 第10 章IIS 与 ASP.NET /385
- 10.1网站 /386
- 10.1.1绑定 /386
- 10.1.2网站应用程序 /388
- 10.1.3虚拟目录 /389
- 10.2通过 ISAPI 扩展 IIS /390
- 10.2.1ISAPI 扩展 /391
- 10.2.2ISAPI 过滤器 /392
- 10.2.3CLR 是一个 COM 组件 /394
- 10.2.4ASP.NET 中的ISAPI 扩展和过滤器 /396
- 10.2.5ISAPI Rewrite/396
- 10.3IIS 与 ASP.NET/397
- 10.3.1IIS5 与 ASP.NET /397
- 10.3.2IIS6 与 ASP.NET /398
- 10.3.3IIS7 与 ASP.NET /399
- 10.4创建网站的两种方法 /403
- 10.5ASP.NET中的加密与解密 /405
- 10.5.1machineKey /405
- 10.5.2加密服务 /407
- 10.5.3配置节的加密和解密 /408
- 10.6本章小结 /410
- 第11 章ASP.NET中的用户 /411
- 11.1从IIS开始 /412
- 11.1.1匿名用户方式 /413
- 11.1.2基本身份验证 /413
- 11.1.3摘要式身份验证 /414
- 11.1.4集成 Windows 身份验证 /415
- 11.1.5.NET Passport 身份验证 /416
- 11.2ASP.NET中的用户信息 /416
- 11.2.1基于 Windows 验证的用户 /416
- 11.2.2基于 Forms 验证的用户 /417
- 11.2.3基于 Passport 验证的用户 /420
- 11.2.4在 IIS7 中使用表单验证 /420
- 11.3.NET 中的用户 /421
- 11.3.1用户的标识 IIdentity /421
- 11.3.2用户 IPrincipal /422
- 11.4网站中的用户 /423
- 11.5成员管理 /423
- 11.5.1用户的基本信息 /424
- 11.5.2成员管理的约定 /425
- 11.5.3基于 SQLServer 的成员管理实现 /426
- 11.5.4自定义的成员管理实现 /427
- 11.5.5辅助工具类 Membership /432
- 11.6用户的扩展信息—个性化数据 /433
- 11.6.1个性化数据的约定 /433
- 11.6.2个性化数据的属性 /434
- 11.6.3实现自定义的个性化数据管理 /436
- 11.6.4匿名的个性化数据 /439
- 11.6.5合并匿名用户的个性化数据 /441
- 11.6.6基于 SQL Server 的个性化数据管理 /442
- 11.6.7管理个性化数据 /444
- 11.7执行程序的用户 /444
- 11.7.1执行网站程序的 Windows 用户 /445
- 11.7.2用户模拟的作用 /446
- 11.7.3数据库连接串中的用户 /447
- 11.8本章小结 /449
- 附录自定义配置参数 /450