最近在交接,事情不多  所以就多逛逛园子,多研究一些以前没研究过的东西

 

要说IHttpModule 以前我也用到过  比如 Url重写 但那是别人写的dll  一直觉得那重写dll功能不太强  可是自己又不会

 

今天写了一个简单的示例 原理大概是明白了  估计以前再碰到url重写的问题  可以自己简单写个自己的dll来实现了

 

不多说了  贴代码   虽然是新手代码  也敢贴

 

IHttpModule 类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace Test
{
    class HttpModule : IHttpModule
    {
        #region IHttpModule 成员

        public void Dispose()
        {
            
        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest += new EventHandler(BeginRequest);
            context.EndRequest += new EventHandler(EndRequest);         
        }


        void BeginRequest(object sender, EventArgs e)
        {         
            HttpApplication http = sender as HttpApplication;
            if (http.Context.Request.Url.OriginalString.IndexOf("/index.cc") != -1)
            {                
                http.Context.Server.Transfer("default.aspx");
            }
            if (http.Context.Request.Form.Count > 3 || http.Context.Request.QueryString.Count > 0)
            {
                http.Context.Response.Write("哈哈!开始");
            }
        }

        void EndRequest(object sender, EventArgs e)
        {
            HttpApplication http = sender as HttpApplication;          
            http.Context.Response.Write("哈哈!结束");
        }


        #endregion
    }
}

 

web.config

 <httpModules>

 <add name="Test1" type="Test.HttpModel,Test"/>

  </httpModules>

 

IHttpModule 和IHttpHandler 两者之间的区别在于

IHttpHandler 是完全替换页面本身的 类似于java中的servlet

IHttpModule 则是在页面之外进行操作 和页面本身没有任何关系

有点类似于设计模式中的适配器模式,把原来的页面包装一下 

不知道我说的对不对

posted on 2010-08-25 16:04  skyzhou  阅读(3211)  评论(0编辑  收藏  举报