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 則表示緩存已經更新完成。最後節結束了。
---恢復內容結束---