c#中的IHttpHandler和IHttpModule

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

 

要说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 则是在页面之外进行操作 和页面本身没有任何关系

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

不知道我说的对不对

你可能感兴趣的:(handler)