請求上下文HttpContext解釋
1 HttpContext上下文作用
有關應用程序狀態信息,處理的請求以及構建的響應等信息全部通過HttpContext上下文獲取
2 Httpcontext類用於從頭至尾跟蹤請求的狀態,他也是有關請求的所有可用信息(包括httpRequest和httpResponse對象)的通道
3 模塊
模塊將實現System.web.IHttpModule接口,System.web.IHttpModule接口有兩個方法
Init(app):實例化模塊類並將其傳遞給HttpApplication實例時,調用此方法。使用此方法可為HttpApplication事件註冊處理程序方法。
Dispose() 在完成請求處理後調用此方法
模塊將在新建HttpApplication對象時進行實例化,每個HttpApplication對象都會獲取它自己的一組模塊對象,在實例化模塊時將調用Init()方法,
和HttpApplication對象一樣,模塊也可用於處理多個請求(但一次只處理一個請求)
4 如何創建自定義的模塊
創建一個實現IHttpModule的類
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace Events { /// <summary> /// 模塊功能,防止未通過身份驗證的用戶訪問指定的窗體/// </summary> public class ParamsModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication app) { app.PostAuthenticateRequest += (src, args) => { if (app.Request.Url.LocalPath=="/Params.aspx"&&!app.User.Identity.IsAuthenticated) { app.Context.AddError(new UnauthorizedAccessException()); } }; } } }
第二部註冊自定義的模塊(asp.net framework不會自動搜索模塊類),使它成為生命周期的一部分,在web.config文件中註冊
<system.webServer>
<modules>
<add name="ParamsProtecttion" type="Events.ParamsModule"/>
</modules>
</system.webServer>
如何讓模塊自動註冊到asp.net framework,而不用使用配置?
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; //特性告訴asp.net fromework他應在應用程序啟動時調用ModuleRegistration類中的RegisterModules方法 [assembly:PreApplicationStartMethod(typeof(CommonModules.ModuleRegistration), "RegisterModules")] namespace CommonModules { public class ModuleRegistration { public static void RegisterModules() { Type[] moduleTypes = { typeof(CommonModules.TimerModule), typeof(CommonModules.LogModule) }; foreach (Type item in moduleTypes) { HttpApplication.RegisterModule(item); } } } }
這樣就不用在web.config文件中註冊了
請求上下文HttpContext解釋