HttpModule和HttpHandler

   在asp.net中也分黑白二派,HttpModule像一个土匪,什么请求都要去检查一下,HttpHandler点名只做某一个具体的事,有趣的是:HttpContext真像个大人物,黑白道的人物有时都要找它帮忙。 帮什么忙呢?可怜的土匪没有仓库,它有东西没地方存放,只能存放在HttpContext那里, 有时惹得Handler也盯上了它,去HttpContext去拿土匪的战利品

1  HttpHandler

    一个HttpHandler用于响应一类特定的请求(如处理所有的Html文件),使用HttpHandler的目的是为了生成响应结果

      常用的使用HttpHandler的页面有:

         aspx页面, 响应请求,输出Html结果

         asmx服务文件, 响应服务调用

         ashx文件, 实现简单的ajax调用

2 HttpModule

   一个HttpHandler用于处理一类特殊的请求,每个aspx,ashx都可以看做是一类请求,有时我们发现所有的页面需要进行相同的检查功能(如身份检查).使用HttpHandler会进行重复的操作.这时需要HttpModule来进行处理,设计HttpModule的目的就是为了提供一个灵活的方法来解决重用问题.它采用事件观察者形式,将每个HttpHandler都需要的功能都抽取出来,形成不同的观察者类型,Asp.net中可以通过在配置文件中自由配置我们需要的HttpModule,(WebConfig中的modules节点)

以下是IHttpModule接口定义

      public interface IHttpModule

{   

      //  初始化模块,并使其为处理请求做好准备。   

      void Init(HttpApplicationapp);   

     void Dispose();

}

由接口可以看出,HttpModule的Init()方法传入参数是HttpApplication对象,这样HttpModule就可以订阅所有的HttpApplication事件了

public class SetOutputCacheModule : IHttpModule
{
    public void Init(HttpApplication app)
    {
        app.PreRequestHandlerExecute += new EventHandler(app_PreRequestHandlerExecute);
    }

    void app_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;

        Dictionary<string, OutputCacheSetting> settings = ConfigManager.Settings;
        if( settings == null )
            throw new ConfigurationErrorsException("SetOutputCacheModule加载配置文件失败。");

        // 实现方法:
        // 查找配置参数,如果找到匹配的请求,就设置OutputCache
        OutputCacheSetting setting = null;
        if( settings.TryGetValue(app.Request.FilePath, out setting) ) {
            setting.SetResponseCache(app.Context);
        }
    }
这个Module用于给一些配置文件中需要缓存的文件设置输入缓存

HttpModule能做什么事:

  修改某些请求(如上文中的修改响应头)

  检查请求(如身份检查)

HttpModule能处理哪些请求

  默认是全部进入Asp.net的请求

  如果只是处理部分请求,自行判断

 

3 三大对象总结

 在请求的处理过程中,HttpApplication对象主要扮演着控制管线处理流程的作用,它负责推进整个处理流程,除了在不同的阶段引发不同的事件外(事件做为一个委托供HttpModule调用),HttpApplication对象会根据当前的请求寻找一个合适的IHttpHandlerApplication实例,并最终得到一个IHttpHandler实例用于处理请求.设计这个三个象的目的在于:

  1 HttpApplication控制处理流程,在不同的阶段引发不同的事件

  2 由于请求的多样性,每个请求会由一个HttpHandler对象处理

  3 对于一些通用性请求,尤其是与响应无关的请求,用HttpModule比较合适

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值