程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> ASP.NET核心處理技術簡介

ASP.NET核心處理技術簡介

編輯:關於ASP.NET

ASP.NET應用程序對象

一、請求的處理參數:上下文對象HttpContext

當一個請求到達ASP.NET服務器,為了處理請求,ASP.NET在服務器上創建了HttpRequest類型的對象來表示請求參數,HttpResponse類型的對象表示回應的處理對象,也就是說,為了處理一次Http請求,我們需要眾多的對,象來表示處理請求所需要的數據,為了簡化服務器端對參數的處理工作,ASP.NET中定義了HttpContext;類型來統一處理參數的表示問題。

二、應用程序對象HttpApplication

當HttpContext對象創建以後,HttpRuntime將隨後創建一個用於處理請求的對象,這個對象的類型就是HttpApplication。它是ASP.NET中處理請求的重要對象,但是它是由ASP.NET創建的,為了便於擴展處理工作,HttpApplication采用處理管道的方法進行處理,也就是將處理分為多個步驟,每個步驟通過編寫事件的形式暴露給程序員,這些事件是按照一定順序一次觸發的,我們可以通過編寫事件成立方法就可以自定義每一個請求的擴展處理過程。

我們看一下HttpApplication的19個標准事件

1 BeginRequest                      ASP.NET開始處理的第一個事件,表示處理的開始

2 AuthenticateRequest                驗證請求,一般用來處理取得請求的用戶信息

3 PostAuthenticateRequest            已經獲取請求的用戶信息

4 AuthorizeRequest                    授權,一般用來檢查用戶的請求是否獲得權限

5 PostAuthorizeRequest                用戶請求已經得到授權

6 ResolveRequestCache                 獲取以前處理緩存的處理結果,如果以前緩存過,就不必再進行請求的處理,直接返回緩存的結果

7 PostResolveRequestCache             已經完成緩存的獲取工作

8 PostMapRequestHandler               已經根據用戶的請求,創建了處理請求的處理器對象

9 AcrequireRequestState               取得請求的狀態,一般用於Session

10 PostAcrequireRequestState           已經取得Session

11 PreRequestHandlerExcute             准備執行處理程序

12 PostRequestHandlerExcute            已經執行了處理程序

13 ReleaseRequestState              釋放請求的狀態

14 PostReleaseRequestState             已經釋放了請求的狀態

15 UpdateRequestCache                  更新緩存

查看本欄目

16 PostUpdateRequestCache              已經更新了緩存

17 LogRequest                          請求的日志操作

18 PostLogRequest                      已經完成了請求的日志操作

19 EndRequest                          本次請求到此結束

首先觸發的事件就是BeginRequest,這個事件標志著服務器處理工作的開始,也是程序員在ASP.NET中針對請求所能處理的第一個事件。

開始處理請求後,第一個工作就是要驗證用戶的身份以實現安全機制,這個工作通過AuthenticateRequest和PostAuthenticateRequest兩個事件處理。顯然AuthenticateRequest表示開始檢查用戶身份,而PostAuthenticateRequest表示驗證完成。

當ASP.NET獲取用戶身份後,根據當前用戶的身份,開始請求權限的檢查工作,當第四個事件AuthorizeRequest觸發的時候,表示進行用戶權限的檢查工作,而第五個事件則標志著完成了用戶權限的檢查工作,如果用戶沒有通過安全檢查,一般情況下,將跳過剩下的事件,直接觸發最後一個事件結束處理。

當用戶獲得了請求的權限,那麼服務器開始准備用最快的方式來是用戶得到回應的結果,ResolveRequestCache事件標志著檢查緩存,看看是否可以直接從以前的緩存的結果中直接取得處理的結果。PostResolveRequestCache 表示緩存檢查的結束。

當不能從緩存中獲取結果的時候,則必須通過一次處理來計算當前請求的結果,在.NET中,用於處理請求以得到結果的需對象稱之為處理對象Handler,在ASP,NET中提供了許多處理程序,程序員也可以自定義處理程序,為了處理這個請求,ASP.NET必須按照匹配規則找到一個處理當前求情的處理程,PostMapRequestHandler事件標志ASP.NET已經獲得了這個處理程序對象,HttpContext的Handler就表示這個處理對象。

得到處理程序後,還不能立馬開始處理,這是因為處理請求還需要許多與這個請求相關的數據,比如我們保存在服務器上關於用戶的一些數據,於是Session就出現了,他提供了基於會話的狀態管理。

為了獲取用戶以前保存的數據,AcrequireRequestState事件給程序員提供了一個切入點,PostAcrequireRequestState 則表示應經獲取了用戶的數據,可以在處理中使用了。

現在我們接下來就是PreRequestHandlerExcute真正開始告訴程序員處理程序就要開始工作了。如果用戶的狀態已經獲取,還有需要在處理程序處理之前進行的工作,就在這個事件中開始吧。

在PreRequestHandlerExcute事件之後,ASP.NET服務器將通過執行處理程序完成請求的處理工作,這個處理程序可能是一個Web窗體,也可能是一個Web服務。

處理程序完成後,服務器開始掃尾工作,PostRequestHandlerExcute 通知程序員,ASP.NET服務器的處理程序已經完成。

在處理完成後,由於在處理程序中,用戶可能修改了用戶特定的專屬數據,那麼修改後的用戶狀態數據可能需要進行序列化和保存處理,ReleaseRequestState事件通知程序員釋放這些數據,PostReleaseRequestState則表示已經釋放完成。

在處理完成後,如果希望將這次處理的結果緩存起來,以便於在後繼的請求中可以直接使用這個結果,UpdateRequestCache 提供了處理的機會,PostUpdateRequestCache 則表示緩存已經更新完成。最後節結束了。

---恢復內容結束---

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved