请求上下文HttpContext解释
Posted 白羽轻飘
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请求上下文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解释的主要内容,如果未能解决你的问题,请参考以下文章
HttpRuntime.Cache与HttpContext.Current.Cache
asp.net mvc中在使用async的时候HttpContext为null的问题
什么是 HttpContext.Current.Request.RawUrl 的 WCF 等效项?