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物件
- request和response——請求響應物件物件
- 通過http上下文判斷是否是Ajax請求HTTP
- Mybatis foreach 請求引數是物件集合MyBatis物件
- urllib.request.Request物件封裝請求物件封裝
- 命令模式-將請求封裝成物件模式封裝物件
- 上下文物件物件
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- 請求引數為物件,mybatis的sql寫法物件MyBatisSQL
- java 請求HTTP返回json集合,物件處理方式JavaHTTPJSON物件
- JavaWeb基礎-Request物件接收表單請求引數JavaWeb物件
- 請求OpenFeign的GET請求時,請求為何失敗?
- HttpContext探究之RequestServicesHTTPContext
- 有趣的請求引數/請求頭
- 大請求、請求超時問題
- 網路請求優化之取消請求優化
- Session物件改變請求頭值導致的401錯誤Session物件
- HttpContext擴充套件類HTTPContext套件
- 全域性獲取HttpContextHTTPContext
- ajax請求
- axios 請求iOS
- python requests get請求 如何獲取所有請求Python
- 後臺接收Json請求引數相容陣列和單個物件JSON陣列物件
- (轉)解密 Golang 的 Request 物件:深入理解 HTTP 請求的關鍵解密Golang物件HTTP
- 如何根據介面請求型別和請求方法,自動執行對應請求型別
- 使用 Laravel 請求類來驗證表單請求Laravel
- URL請求不能解決中文請求的問題
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- Android網路請求(終) 網路請求框架RetrofitAndroid框架
- Android網路請求(3) 網路請求框架OkHttpAndroid框架HTTP
- springboot打jar包請求jsp請求不到問題Spring BootJARJS
- React Native請求Https請求不通怎麼解決React NativeHTTP
- day93:flask:Cookie&Session&請求鉤子&捕獲錯誤&上下文&Flask-ScriptFlaskCookieSession
- java post 請求Java
- 跨域請求跨域
- http請求概述HTTP
- 預檢請求