HttpContext請求上下文物件
一、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();
}
輸出:
相關文章
- EF建立上下文物件HttpContext和CallContext物件HTTPContext
- Flask中的請求上下文和應用上下文Flask
- [譯]Flask教程–請求物件Flask物件
- XHR物件的get請求物件
- Django請求響應物件Django物件
- 通過http上下文判斷是否是Ajax請求HTTP
- request和response——請求響應物件物件
- 命令模式-將請求封裝成物件模式封裝物件
- iOS 同步請求 非同步請求 GET請求 POST請求iOS非同步
- Mybatis foreach 請求引數是物件集合MyBatis物件
- urllib.request.Request物件封裝請求物件封裝
- 上下文物件物件
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- Tomcat 7 的一次請求分析(二)Socket 轉換成內部請求物件Tomcat物件
- 請求框架&移動請求框架
- 請求引數為物件,mybatis的sql寫法物件MyBatisSQL
- java 請求HTTP返回json集合,物件處理方式JavaHTTPJSON物件
- JavaWeb基礎-Request物件接收表單請求引數JavaWeb物件
- 使用strutstestcase如何在請求引數中傳遞物件...物件
- 請求OpenFeign的GET請求時,請求為何失敗?
- 有趣的請求引數/請求頭
- 大請求、請求超時問題
- 【轉】怎麼用PHP傳送HTTP請求(POST請求、GET請求)?PHPHTTP
- Mock HttpContext in UnitTestMockHTTPContext
- 建立相容IE6瀏覽器的ajax請求物件瀏覽器物件
- 網路請求優化之取消請求優化
- ajax請求
- 批量請求
- http請求HTTP
- HTTP 請求HTTP
- HttpContext探究之RequestServicesHTTPContext
- 如何根據介面請求型別和請求方法,自動執行對應請求型別
- 使用 Laravel 請求類來驗證表單請求Laravel
- URL請求不能解決中文請求的問題
- 請求重定向和請求轉發的區別
- Zttp 傳送 form params 請求 而非 JSON 請求ORMJSON
- Android Http請求框架一:Get 和 Post 請求AndroidHTTP框架
- Android okHttp網路請求之Get/Post請求AndroidHTTP