HttpContext詳解

 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");
}

//特別說明ServerTransfer是在服務器直接操作的的和調用的地方屬於同一次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 事件



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章