HttpContext基於HttpApplication的處理管道,因爲HttpContext對象貫穿整個處理過程,因此,能夠從HttpApplication處理管道的前端將狀態數據傳遞到管道的後端,完成狀態的傳遞任務。html
HttpContext的生命週期從服務器接收的HTTP請求開始到反應發送回客戶端結束。前端
在WebForm或類庫(包括MVC)項目中,經過Current靜態屬性,就可以得到HttpContext的對象。後端
HttpContext context = HttpContext.Current;
若是是在Asp.net MVC的Controller中,經過this.HttpContext;就能獲取到HttpContextBase對象。服務器
HttpContextBase context = this.HttpContext;
若是是在MVC視圖中能夠這樣獲得:this
@Html.ViewContext.HttpContext
在MVC中是HttpContextBase在WebForm中是HttpContext。url
另外,還有些地方有人可能會有些困惑,由於貌似HttpContext中有不少對象在Page中也有,例如Request,Response,Cache,Session等等。它們之間有什麼關係呢?在這裏咱們用Session、Request來進行說明。spa
新建一個WebForm程序,輸入代碼以下:.net
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)); }
輸出以下:code
這用不着多說了,HttpContext與Page裏的對象是同一個對象。HttpContext之因此也能夠獲取只是爲了方便在類庫項目中輕易得到這些請求對象。orm
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經常使用方法:
名稱 | 說明 |
---|---|
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(); }
輸出: