重写HttpModule机制.docx_第1页
重写HttpModule机制.docx_第2页
重写HttpModule机制.docx_第3页
重写HttpModule机制.docx_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

写这篇文章,心里多少有些不安。主要是因为我对在web.config文件中对HttpModule进行多个自定义HttpModule的配置与之前一位牛人的见解有些不同【具体参见/Jax/archive/2007/10/02/912884.html】。所以这篇文章仅仅只是我个人浅见,希望对HttpModule机制有深入了解的人能指出我理解有偏差的地方,同时也希望大家积极讨论,共同进步。最近因为用SlickUpload,它做上传效果确实很拉风,功能也很强。但由于付费,使用之后一直有个div层显示,并且往它的官网上重定向。所以就萌发了重写HttpModule机制的想法。熟悉Asp.Net的朋友都应该知道HttpModule,它是处理客户端请求中很重要的一个环节。所有客户端的请求都必须通过它进行一些前期处理后,再由它交给HttpHandler进行最终处理。HttpHandler调用ProcessRequest()方对 http请求进行处理,处理完成以后完成以后,再交给HttpModule,然后再由HttpModule将处理完的Http请求信息转交给客户端。处理 流程如下图:图1:Http请求到达HttpRuntime: 图2:HttpModule与HttpHandler处理流程:整个Http请求处理流程为:HttpRequest-inetinfo.exe-ASPNET_ISAPI.DLL-HttpPipeline-ASPNET_WP.EXE-HttpRuntime-HttpApplication Factory-HttpApplication-HttpModule-HttpHandler Factory-HttpHandler-HttpHandler.ProcessRequest()。HttpModule的工作原理:监听HttpRequest请求,同时对HttpRequest增添或者过滤一些内容。 HttpModule实现了IHttpModule接口。重写HttpModule的实现即设计一个现实了IHttpModule接口的类。 IHttpModule接口包括两个方法:1、Dispose()。2、Init()。具体代码如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Web; 6 7 namespace HttpModules 8 9 public class ValidaterHttpModuleEvents : IHttpModule10 11 #region IHttpModule 成员12 13 public void Dispose()14 15 throw new NotImplementedException();16 17 18 public void Init(HttpApplication context)19 20 21 context.BeginRequest += new EventHandler(Application_BeginRequest);22 context.EndRequest += new EventHandler(context_EndRequest);23 24 25 void context_EndRequest(object sender, EventArgs e)26 27 HttpContext.Current.Response.Write(ValidaterHttpModuleEvents EndRequest );28 29 30 #endregion31 32 void Application_BeginRequest(object sender, EventArgs e)33 34 35 HttpApplication application = sender as HttpApplication;36 application.CompleteRequest();37 /HttpContext.Current.Response.Redirect();38 application.Context.Response.Write(ValidaterHttpModuleEvents Begin Request );39 40 41 42 43 然后,在Web.Config的System.Web的httpModules配置节中添加如下配置代码:name可以随便指定,Type由【,】分割为两部分,前一部分指明实现IHttpModule接口类的全名,包括命名空间与类型名,后一部分指明程序集编译成功后的程序集。 这样我们在浏览器中浏览页面即可看到如下图:同样,如果我们在多个类库中以相同的方式重写IHttpModule机制,只需要在httpModules配置节中添加如下配置代码添加相同的配置节即可。我在另外一个库中重写的代码如下:expand source然后在配置文件中的配置如下: 此时的输出如下:ValidaterHttpModuleEvents Begin Request ValidaterHttpModuleEvents EndRequest HttpModulesTest2 EndRequest同样:我再用同样的方式重写一个HttpModule,得出的输出结果类似。稍后,我会给出下载代码。由此输出结果我得出如下结论:多个HttpModule对Http请求进行处理,只有Web.Config中 httpModules配置节的第一个IHttpModule的BeginRequest事件会响应,但是httpModules配置节下的所有 IHttpModule实例对象的EndRequest事件都会响应。如果大家看看本文上面的链接地址,一定会发现:他说的执行方式是httpModules配置节下的所有重写HttpModule机制的BeginRequest会按照配置顺序执行,然后才是EndRequest也按照配置顺序执行。按照我上面的例子就应该是:1、HttpModule.BeginRequest2、HttpModuleTest2.BeginRequest3、HttpModule.EndRequest4、HttpModuleTest2.EndRequest而事实上,按照我示例中的输出,却并非如此。以上为个人意见。代码下载:/source/3466595(博客园上一直不知道在哪上传文件,所以一直都发布在CSDN上。)参考资料:1、http:/h

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论