一、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)); }
輸出如下:
這用不着多說了,HttpContext與Page里的對象是同一個對象。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存參!"); }
HttpContext的Current屬性很重要,這個屬性讓你能夠在任何地方找到它。
如果希望提供一些靜態屬性,並且,只希望與一次請求關聯,那么建議借助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(); }
輸出: