作者簡介
郝冠軍,資深微軟技術專家和培訓講師。從事軟體開發工作十餘年,精通.NET和ASP. NET開發。他還是部落格園和CSDN等社區的活躍技術專家,經常幫助大家解答各種疑難問題。此外,作為微軟社區精英的領導團隊成員,他還負責微軟社區精英的招募工作。現任思勝.net培訓高級講師!
內容簡介
如果你只是想系統地學習如何簡單地利用asp. net快速地進行開發,《asp. net本質論》也許不是你想要的;如果你不滿足於只是會利用asp. net強大的控制項功能完成一些常規套用的開發,而是想深入探究asp. net的本質和精髓,實現從一個控制項使用人員向系統開發人員的過渡,那么這本書是你不能錯過的,也是你目前的唯一選擇。
第1~4章是 asp. net 的核心部分,細緻地剖析了 asp. net中的請求處理機制、asp. net 中的對象與 http 之間的映射關係、應用程式處理管道的處理過程、處理程式的處理機制,以及多執行緒技術在asp. net中的套用。第5~8章是經典的webform部分,重點講解了控制項的原理與頁面的生成機制,包括流與控制項的關係、控制項與頁面的關係、數據綁定控制項與模板的關係,以及 asp. net 中的各種狀態管理技術。第9章分析了asp. net mvc的處理過程,以及asp .net mvc套用與經典的 asp .net套用之間的關係。第10章討論了 asp. net 與 iis 伺服器之間的關係,並分別針對不同版本的iis分析了其處理過程。第11章對 asp. net 套用中的用戶問題進行了分析,並就各種常見問題給出了解決方案。
目錄
前言
第1章 網站應用程式 /1
1.1 web應用程式的簡單回顧 /2
1.1.1 資源的地址—通用資源標識符 /2
1.1.2 找到主機 /3
1.1.3 http協定 /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.1 web 應用程式域 /13
1.3.2 不使用gac 和bin 載入web 應用程式域 /14
1.3.3 默默無聞的工作者對象 /16
1.3.4 web 應用程式的運行時 /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.1 asp .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.2 httpapplication 的處理管道 /38
2.2.3 處理過程的簡單介紹 /38
2.2.4 httpcontext狀態管理 /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.5 httpmodule的事件 /46
2.3.6 通過 global.asax 創建 httpapplication 的事件處理程式 /46
2.3.7 global.asax 中 httpapplication 事件的自動註冊 /48
2.3.8 特殊的httpapplication 事件處理 /48
2.4 兩個特殊的事件 /51
2.5 大檔案上傳問題 /51
2.5.1 檔案上傳的規範 /51
2.5.2 asp .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.4 web 服務處理程式 /94
3.4.1 web 服務處理程式工廠 /94
3.4.2 使用 web 服務處理程式 /95
3.4.3 web 服務的常用標籤 /96
3.4.4 派生自 system.web.services.webservice 類的意義 /98
3.5 mvc 處理程式 /98
3.5.1 mvc 的路由接口 iroutehandler /99
3.5.2 自定義的 iroutehandler /100
3.5.3 註冊路由處理程式 /101
3.5.4 獲取控制器的工廠接口 icontrollerfactory /102
3.5.5 mvc 請求的處理過程 /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.4 sharpziplib /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.4 httpapplication 中的異步執行緒 /139
4.4.1 asp .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.2 render和rendercontrol /161
5.2.3 控制項基類 /161
5.2.4 組合模式 composite /163
5.2.5 id 是一個問題 /165
5.3 形形色色的控制項 /171
5.3.1 html 控制項 /172
5.3.2 web 控制項 /172
5.3.3 webpart 控制項 /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.5 web控制項適配器—webcontroladapter /193
5.6.6 頁面適配器—pageadapter /193
5.6.7 使用 adapter 定製表單的action /194
5.7 自定義的 url 重寫 /195
5.7.1 url 重寫的原理 /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.2 cookie /209
6.1.3 url /213
6.2 視圖狀態viewstate /215
6.2.1 序列化和反序列化 /215
6.2.2 控制序列化 /217
6.2.3 base64 /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.3 session 保存的位置 /233
6.5.4 session 的過期問題 /237
6.5.5 壓縮 session 數據 /238
6.6 httpcontext 狀態 /238
6.7 cache /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.7 web 伺服器端的頁面快取 /247
6.7.8 頁面局部快取 /249
6.7.9 自定義的輸出快取提供器 /253
6.8 memcached /254
6.8.1 下載和安裝 memcached /255
6.8.2 在 asp .net 中訪問 memcached /256
6.9 統計當前線上用戶 /258
6.9.1 module 的處理 /258
6.9.2 註冊 module /261
6.9.3 module 的配置參數 /262
6.9.4 module 的事件處理 /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.3 databinder /272
7.2.4 page 中的 eval /273
7.2.5 在屬性中使用綁定表達式 /273
7.3 repeater控制項 /273
7.3.1 數據的來源 datasource /273
7.3.2 repeater 的基石—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.2 gridview /283
7.4.3 listview 和 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.4 petshop 中的自定義控制項 /335
8.4.1 基類 /335
8.4.2 表格 /335
8.4.3 處理當前頁碼參數 /336
8.4.4 datasource 屬性 /336
8.4.5 事件 /337
8.4.6 生成 /338
8.5 本章小結 /342
第 9 章 mvc /343
9.1 asp .net mvc 是表現層的mvc /344
9.2 在 httpapplication 中的asp .net mvc /344
9.2.1 創建 routetable /345
9.2.2 urlroutingmodule事件處理 /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.5 routing /356
9.3.6 requestcontext 的前世今生 /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.4 controller 的繼承關係 /364
9.4.5 controller 中的狀態管理 /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.4 model 的驗證 /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.1 isapi 擴展 /391
10.2.2 isapi 過濾器 /392
10.2.3 clr 是一個 com 組件 /394
10.2.4 asp .net 中的isapi 擴展和過濾器 /396
10.2.5 isapi rewrite /396
10.3 iis 與 asp .net /397
10.3.1 iis5 與 asp .net /397
10.3.2 iis6 與 asp .net /398
10.3.3 iis7 與 asp .net /399
10.4 創建網站的兩種方法 /403
10.5 asp .net中的加密與解密 /405
10.5.1 machinekey /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.2 asp .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