ASP.NET HttpModule的使用说明
来源:互联网 发布:影音后期制作软件大全 编辑:程序博客网 时间:2024/05/19 02:18
摘要:HttpModule可以用于全局身份验证、url重写、异常处理等场景。本文以身份验证为场景,介绍HttpModule的使用。
ASP.NET请求处理过程是基于管道模型的,这个管道模型是由多个HttpModule和HttpHandler组成,ASP.NET把http请求依次传递给管道中各个HttpModule,最终被HttpHandler处理,处理完成后,再次经过管道中的HTTP模块,把结果返回给客户端。我们可以在每个HttpModule中都可以干预请求的处理过程。
注意:在http请求的处理过程中,只能调用一个HttpHandler,但可以调用多个HttpModule。
当请求到达HttpModule的时候,系统还没有对这个请求真正处理,但是我们可以在这个请求传递到处理中心(HttpHandler)之前附加一些其它信息,或者截获的这个请求并作一些额外的工作,也或者终止请求等。在HttpHandler处理完请求之后,我们可以再在相应的HttpModule中把请求处理的结果进行再次加工返回客户端。
1 HttpModule工作原理
负责监听HttpRequest,同时对HttpRequest增添或者过滤掉一部分内容。也就是说,当一个HTTP请求到 达HttpModule时,整个ASP.NET Framework系统还并没有对这个HTTP请求做任何处理,也就是说此时对于HTTP请求来讲,HttpModule是一个HTTP请求的“必经之 路”,所以可以在这个HTTP请求传递到真正的请求处理中心(HttpHandler)之前附加一些需要的信息在这个HTTP请求信息之上,或者针对截获 的这个HTTP请求信息作一些额外的工作,或者在某些情况下干脆终止满足一些条件的HTTP请求,从而可以起到一个Filter过滤器的作用。
HttpModule实现了接口IHttpModule,我们可以自定义实现该接口的类,从而取代HttpModule。
1.1 HttpModule事件
BeginRequest指示请求处理开始AuthenticateRequest封装请求身份验证过程AuthorizeRequest封装检查是否能利用以前缓存的输出页面处理请求的过程ResolveRequestCache从缓存中得到相应时候触发AcquireRequestState加载初始化Session时候触发PreRequestHandlerExecute在Http请求进入HttpHandler之前触发PostRequestHandlerExecute在Http请求进入HttpHandler之后触发ReleaseRequestState存储Session状态时候触发UpdateRequestCache更新缓存信息时触发EndRequest在Http请求处理完成的时候触发PreSendRequestHenaders在向客户端发送Header之前触发PreSendRequestConternt在向客户端发送内容之前触发1.2 HttpModule生命周期
2 项目范例代码
2.1 实现IHttpModule接口
public class CustomHttpModule : IHttpModule { //单点登录URL public string LoginUrl = "http://www.sample.com/Login/Index?ReturnUrl=http://www.sample.com/Book/Search"; public void Dispose() { throw new NotImplementedException(); } public void Init(HttpApplication context) { context.BeginRequest += Context_BeginRequest; //bind BeginRequest event, handle event } private void Context_BeginRequest(object sender, EventArgs e) { HttpApplication HA = (HttpApplication)sender; //获得发生该事件的对象 var rlLoginCookie = HA.Context.Request.Cookies["LoginNameInCookie"]; //如果未授权,则跳转到登陆页面 if (rlLoginCookie == null) { HA.Response.Redirect(LoginUrl); } } }
2.2 注册HttpModule
IIS7.0以前的版本中,注册代码放在web.config文件下,configuration->system.web以下
注册代码为:
<httpModules> <add name="ModuleClassName" type="NameSpace. ModuleClassName, NameSpace"/></httpModules>
IIS7及更新版本中,配置信息需要在configuration->system.webServer以下
注册代码为
<modules> <add name="ModuleClassName" type="Namespace.ModuleClassName"/> </modules>
- ASP.NET HttpModule的使用说明
- ASP.NET的(HttpModule,HttpHandler)
- ASP.NET的(HttpModule,HttpHandler)
- ASP.NET的(HttpModule,HttpHandler
- ASP.NET的(HttpModule,HttpHandler)
- ASP.NET必须知道的:HttpModule,HttpHandler
- ASP.NET必须知道的:HttpModule,HttpHandler
- ASP.NET必须知道的:HttpModule,HttpHandler
- 学习asp.net里的HttpModule
- NET ASP.NET精讲(ASP.NET的(HttpModule,HttpHandler))
- ASP.NET (HttpModule,HttpHandler)
- asp.net httpModule
- asp.net HttpModule类
- ASP.NET中的HttpModule
- ASP.NET (HttpModule,HttpHandler)
- ASP.NET基础 HttpModule
- asp.net httpmodule handler
- ASP.NET的(HttpModule,HttpHandler) Asp.net处理模式
- squid的正反向代理
- Linux运维笔记-文档总结-mariadb数据库的各项操作(全)
- Linux--RH254---unit 8 mariadb数据库
- MATLAB面向对象编程命名空间的使用
- 二叉树遍历
- ASP.NET HttpModule的使用说明
- C和指针 练习 1-3
- Binary Tree K level sum (samsung)
- 在“一带一路”上,有哪些国家?
- 非虚方法的调用
- 无数个骂娘的故事告诉你,千万别做技术合伙人!
- python基础知识(3)
- Linux--RH254---unit 2 高级网络配置
- 给定N张扑克牌和一个随机函数,设计一个洗牌算法