HttpContext 類:封裝有關個別 HTTP 請求的所有 HTTP 特定的信息。
在處理請求執行鏈的各個階段中,會有一個對象在各個對象之間進行傳遞,也即會保存請求的上下文信息,這個對象就是HttpContext對象。HttpContext封裝了ASP.NET要處理的單次請求的所有信息。在請求處理機制建立時,HttpContext類有HttpRuntime對象實例化,接着該對象會經歷請求生存期的各個階段
HttpContext的介紹:保持單個用戶、單個請求的數據,並且數據只在該請求期間保持。被提供用於保持需要在不同的HttpModules和HttpHandlers之間傳遞的值。它也可以用於保持某個完整請求的相應信息。
Current屬性是個十分有用的靜態成員,返回當前請求的HttpContex對象。Items是一個哈希表,在處理請求所涉及的模塊和處理程序間共享數據。每個自定義模塊或處理程序能夠將自身信息添加到請求的HttpContext對象中,在Items中存儲的信息最終被頁面使用,但這些信息只能在請求的執行期間訪問
用法
1、在兩個表單之間傳遞數據
看下面的代碼:
對於WebForm1:
private void Page_Load(object sender, System.EventArgs e)
{
ArrayList list = new ArrayList(4);
list.Add("This list ");
list.Add("is for ");
list.Add("WebForm2 ");
list.Add("to see. ");
Context.Items["WebForm1List"] = list;
Server.Transfer("WebForm2.aspx");
}
//特別說明Server。Transfer是在服務器直接操作的的和調用的地方屬於同一次http請求,此處如果使用Response.Redirect則再WebForm2中再次訪問Context.Items["WebForm1List"]時,Context.Items["WebForm1List"]null,因爲Response.Redirect是重新發起了一次Http請求
對於WebForm2:
private void Page_Load(object sender, System.EventArgs e)
{
ArrayList list = Context.Items["WebForm1List"] as ArrayList;
if(list != null)
{
foreach(string s in list)
{
Response.Write(s);
}
}
}
在WebForm1的頁面加載過程中,通過Server.Transfer方法,將WebForm1的狀態傳遞到了WebForm2,WebForm2可以得到它,並作一些相應的處理。用法1也可以用Session來做。
2、截獲Http請求並作特殊處理
主要是用在Application_BeginRequest方法裏。Application_BeginRequest方法在global.asax.cs裏定義。你可以在Http請求剛剛開始的時候,截獲他,做一些特殊的處理。這裏你不能用Session來做,因爲此時Session對象還沒有被建立。
利用Context.Item集合,你可以在Http請求的整個生命期,通過HttpModules, HttpHandlers, Webforms, and Application 事件