zoukankan      html  css  js  c++  java
  • HttpHandle与HttpModule的区别

      设计HttpHanlder的目的很明确:生成响应结果。
      那么,设计HttpModule又是为什么呢?  

          前面说过,一个HttpHanlder用于处理一类特定的请求,每个aspx, ashx都可以认为是一类请求。 有时候我们发现所有页面可能都需要某些相同的检查功能(如身份检查), 假如只能使用HttpHanlder,那我们就要让所有页面都去调用那些相同的检查功能。 谁愿意做这些重复的事情? 或许有些人会回答,可以自己实现一个基类,把检查功能放在基类中去调用。 然而,这种做法只能解决重复调用问题,它会让代码失去灵活性(扩展性), 试想一下:如果需要再加入新的检查功能,或者用新的检查方法替换原有的检查逻辑时怎么办? 只能是修改基类了吧?
          设计HttpModule的目的正是为了提供一个灵活的方法解决这种功能重用问题。 它采用事件(观察者)的设计模式,将某些HttpHanlder都需要的功能抽取出来, 形成不同的观察者类型,这些观察者类型可以编译成类库形式,供多个网站项目共用。 为了让ASP.NET管线更灵活,ASP.NET允许我们在web.config中自由配置需要的HttpModule,例如:

         <!--适用于IIS6的配置-->

    <system.web>
        <httpModules>
            <add name="SetOutputCacheModule" type="MyMVC.SetOutputCacheModule, MyMVC"/>
        </httpModules>
    </system.web>
    
    <!--适用于IIS7的配置(集成模式)-->
    <system.webServer>
        <modules>
            <add name="SetOutputCacheModule" type="MyMVC.SetOutputCacheModule, MyMVC" preCondition="integratedMode" />
        </modules>
    </system.webServer>

     我们用HttpModule做什么事情? 

      1. 修改某些请求(例如前面的示例修改了响应头)。
      2. 检查检查请求(例如身份认证检查)。

      HttpModule能处理哪些请求呢? 

      1. 默认是全部进入ASP.NET的请求。
      2. 如果只需要处理部分请求,那么请自行判断。

     
  • 相关阅读:
    AppDelegate动态加载StoryBoard
    带交互的 iOS 产品原型可以用什么软件制作?
    day06.1-module模块和包介绍
    day05.2-一个文件的增删改查实例
    day05.1-文件处理
    day04.4-装饰器
    day04.3-生成器
    day04.2-迭代器
    day04.1-三元表达式与列表解析
    day03.2-内置函数的使用
  • 原文地址:https://www.cnblogs.com/gallop/p/6986807.html
Copyright © 2011-2022 走看看