HttpContext請求上下文物件

風靈使發表於2019-03-07

一、HttpContext概述

HttpContext基於HttpApplication的處理管道,由於HttpContext物件貫穿整個處理過程,所以,可以從HttpApplication處理管道的前端將狀態資料傳遞到管道的後端,完成狀態的傳遞任務。

HttpContext的生命週期從伺服器接收的HTTP請求開始到反應傳送回客戶端結束。

在WebForm或類庫(包括MVC)專案中,通過Current靜態屬性,就能夠獲得HttpContext的物件。

HttpContext context = HttpContext.Current;

如果是在Asp.net MVC的Controller中,通過this.HttpContext;就能獲取到HttpContextBase物件。

  HttpContextBase context = this.HttpContext;

如果是在MVC檢視中可以這樣得到:

  @Html.ViewContext.HttpContext

在MVC中是HttpContextBase在WebForm中是HttpContext

另外,還有些地方有人可能會有些困惑,因為貌似HttpContext中有很多物件在Page中也有,例如Request,Response,Cache,Session等等。它們之間有什麼關係呢?在這裡我們用Session、Request來進行說明。

新建一個WebForm程式,輸入程式碼如下:

        protected void Page_Load(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            context.Session.Add("1","劉備");
            Response.Write(Page.Session["1"]);      //輸出劉備
            Response.Write(object.ReferenceEquals(context.Session, Page.Session));  //輸出 True 表明這是同一個物件
            Response.Write(object.ReferenceEquals(context.Request, Page.Request));  
        }

輸出如下:
這裡寫圖片描述
  
這用不著多說了,HttpContextPage裡的物件是同一個物件。HttpContext之所以也可以獲取只是為了方便在類庫專案中輕易獲得這些請求物件。

二、HttpContext常用屬性

HttpContext常用屬性:

名稱 說明
Application 為當前 HTTP 請求獲取 HttpApplicationState 物件。
Cache 獲取當前應用程式域的 Cache 物件。
Current 為當前 HTTP 請求獲取或設定 HttpContext 物件。
CurrentHandler 獲取表示當前正在執行的處理程式的 IHttpHandler 物件。
Handler 獲取或設定負責處理 HTTP 請求的 IHttpHandler 物件。
Items 獲取可用於在 HTTP 請求過程中在 IHttpModule 介面和 IHttpHandler 介面之間組織和共享資料的鍵/值集合。
PreviousHandler 獲取父處理程式的 IHttpHandler 物件。
Profile 獲取當前使用者配置檔案的 ProfileBase 物件。
Request 為當前 HTTP 請求獲取 HttpRequest 物件。
Response 為當前 HTTP 響應獲取 HttpResponse 物件。
Server 獲取提供用於處理 Web 請求的方法的 HttpServerUtility 物件。
Session 為當前 HTTP 請求獲取 HttpSessionState 物件。
SkipAuthorization 獲取或設定一個值,該值指定 UrlAuthorizationModule 物件是否應跳過對當前請求的授權檢查。
Timestamp 獲取當前 HTTP 請求處理請求的時間點

對於以上這一個類,寫不了什麼DEMO。因為全部都是返回物件,要深入研究Asp.net,關鍵是要深入瞭解裡面返回的這些物件。

 protected void Page_Load(object sender, EventArgs e)
        {
            HttpContext context = HttpContext.Current;
            context.Items.Add("kk","通過context存參!");
        }

HttpContextCurrent屬性很重要,這個屬性讓你能夠在任何地方找到它。

如果希望提供一些靜態屬性,並且,只希望與一次請求關聯,那麼建議藉助HttpContext.Items的例項屬性來實現。

三、HttpContext常用方法

HttpContext常用方法:

名稱 說明
AddError 將異常新增到當前 HTTP 請求的異常集合中。
ClearError 清除當前 HTTP 請求的所有錯誤。
GetGlobalResourceObject 已過載。 獲取應用程式級別的資源。
GetLocalResourceObject 已過載。 獲取頁級別的資源。
GetSection 獲取當前應用程式的預設配置的指定配置節。
RemapHandler 用於為請求指定處理程式。
RewritePath 重寫路徑,以便後續的Asp.net以為這是才是真正的地址。RewritePath用在無 Cookie 會話狀態中。

示例:

 public ActionResult Index()
        {
            HttpContextBase context = this.HttpContext;
            context.RewritePath("1.html");      //重寫url方法,以便後續的Asp.net以後這個是實際的請求地址
            Response.Write(context.Request.Url.AbsolutePath);
            return View();
        }

輸出:
這裡寫圖片描述

相關文章