HttpHandler HttpModule入门篇 (转)
2009-12-09 13:11
441 查看
ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览 器中。 生命周期中涉及到几个非常重要的对象:HttpHandler,HttpModule,IHttpHandlerFactory,他们的执行(顺序)大致的执行过程是这样的:client端发送页面请求,被IIS的某个进程截获,它根据申请的页 面后缀(.aspx)不同,调用不同的页面处理程序(.asp->asp.dll; .aspx->ISAPI.dll).而页面处理程序在处理过程中,则要经历HttpModule,HttpHandler的处理:前者HttpModule用于页面处理前和处理后的一些事件的处理,后者HttpHandler进行真正的页面的处理。 如前所说,HttpModule会在页面处理前和后对页面进行处理,所以它不会影响真正的页面请求。通常用在给每个页面的头部或者尾部添加一些信息(如版 权声明)等.曾经见过一些免费的空间,我们的页面上传上去后,浏览的时候发现,在每个页面的头部和尾部多了很多小广告....,如果理解了 HttpModule的原理,要做这个就不是很难了~ IHttpModule与IHttpHandler的区别整理 1.先后次序.先IHttpModule,后IHttpHandler. 注:Module要看你响应了哪个事件,一些事件是在Handler之前运行的,一些是在Handler之后运行的 2.对请求的处理上: IHttpModule是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求. IHttpHandler则属于挑食类型,只有ASP.net注册过的文件类型(例如aspx,asmx等等)才会轮到调用它. 3.IHttpHandler按照你的请求 生成响应的内容,IHttpModule对请求进行预处理,如验证、修改、过滤等等,同时也可以对响应进行处理 ASP.Net系统本身配置有很多HttpHandler和HttpModule,以处理aspx等.Net标准的页面文件,以及这些页面文件中标 准的事件处理等。查看%System%/Microsoft.NET\Framework\v2.0.50727\CONFIG目录下的 web.config文件中的httpHandlers和httpModules节点,可以看到这些配置。如果有兴趣,可以使用Reflector查 看.Net系统中相关的类和方法,了解.Net如何处理以及做了什么处理。 .Net也提供了一套机制来开发自定义的HttpHandler和 HttpModule,均可以用于对HttpRequest的截取,完成自定义的处理。 HttpModule 继承System.Web.IHttpModule接口,实现自己的HttpModule类。必须要实现接口的两个方法:Init和Dispose。在 Init中,可以添加需要截取的事件;Dispose用于资源的释放,如果在Init中创建了自己的资源对象,请在Dispose中进行释放。 public void ProcessRequest(HttpContext Context) { try { //申明Request HttpRequest Request = Context.Request; //取来路Url的绝对路径 string Url = Request.Url.AbsolutePath; //取访问的Web文件的开始字符间隔数 int RegStart = Url.LastIndexOf("/") + 1; //申明一个确定Web文件名是否全是数字 Regex Reg = new Regex(@"\d+"); //用正则表达式进行匹配 if (Reg.IsMatch(Url, RegStart)) { //如果web文件名是数字,则判定是查询相关文章,执行指定页面 Context.Server.Execute("~/PermaLink.aspx?id=" + Reg.Match(Url, RegStart).Value); } } catch { Context.Response.Redirect(Context.Request.Url.ToString()); } } 当然你首先要做的是先建一个类,并继承自IHttpHandler,然后把这段代码拷入,并编译。在Web项目中若要使用此功能,需要在web.config里面加上如下语句: <httpHandlers> <add verb="*" path="*.shtml" type="HttpHandle.UrlRewrite" /> </httpHandlers> 同时,还要在IIS中对Web项目进行配置,在Web项目的属性中,在主目录选项卡里,把执行权限改为"脚本和可执行文件",然后打开配置,在应用程序扩展里加上需重写的文件格式的扩展,好了,成事具备,只欠运行了。 |
相关文章推荐
- 【N年前的文章脑补:HttpHandler HttpModule入门篇】
- HttpHandler HttpModule入门篇
- [导入]HttpHandler和HttpModule--入门
- HttpHandler和HttpModule--入门
- HttpHandler HttpModule入门篇
- HttpModule和Http Handler (比较与区别)
- ASP.NET的(HttpModule,HttpHandler)
- Httphandler,HttpModule学习笔记
- asp.net架构之请求处理过程:HttpModule,HttpHandler
- IHttpModule 系列一 入门
- HttpHandler和HttpModule 心得介绍
- HttpHandler HttpModule 区别(转)
- HttpModule与HttpHandler详解
- 转:HttpModule与HttpHandler详解
- Asp.Net中的HttpModule和HttpHandler
- ASP.NET内部原理(HttpHandler和HttpModule)
- HttpHandler 和HttpModule区别
- HttpModule, HttpHandler, Global.asax
- HttpHandler与HttpModule的理解与应用
- C#中HttpModule,HttpHandler,HttpHandlerFactory简单使用