zoukankan      html  css  js  c++  java
  • 浅析ASP.NET HTTP Module

    简要说明

          最近半年一直在做一个项目,公司的前端MES系统.然后呢,最近又一直在考虑权限卡控的问题.于是就把之前看过的HTTP Module又重新研究了一番.记得很久之前就在一个同事面前,和其高谈阔论过HTTP模块的作用,至今仍历历在目.当时讨论的话题是如何做网站的统计分析,我说如果是ASP.NET的话,使用HTTP Module是一个很好的方式.因为HTTP模块可以重用呀.只要配置Web.config就可以啦,可以被多个网站重用,很适合公司目前的情况.然后还说了一番自己的见解,分析了一番ASP.NET应用程序的生命周期.最后结论是HTTP Module可以做,而且会比较方便的做.进一步拓展到如果不是ASP.NET的网站,那一样是可以做,只要重新配置一下IIS就可以啦.(嗯,注意哦这个讨论仅限于与Windows的IIS环境下哟).后来很长时间没有碰,那个网站统计分析的想法也没有去实践论证.发现自己啦~~~是个空想主义者 = =|| 好啦,总结一下HTTP Module,阶段性总结,梳理一下自己的知识.

    HTTP模块概述

    HTTP模块是一个在每次针对应用程序发出请求时调用的程序集.HTTP模块作为请求管道的一部分调用,它能够在整个请求过程中访问生命周期事件.因此,HTTP模块使您可以检查传入的请求并根据该请求进行操作.它们还使您可以检查传出的响应并修改它.所以HTTP模块通常具有以下用途:

    安全

    统计信息和日志记录

    自定义的页眉或页脚

    Url Rewrite

    其实 ASP.NET使用模块来实现各个应用程序功能,其中包括Forms身份验证,缓存,会话状态和客户端脚本任务.

    HTTP模块工作方式

    模块必须经过注册才能从请求管道接收通知.注册HTTP模块的最常用发发就是在应用程序的web.config中进行注册.IIS 7.0有另外的注册方式.模块经过注册之后就可以在应用程序中工作.具体工作方式如下描述:

    1、ASP.NET创建表示应用程序的HttpApplication类的实例时,将创建已注册的任何模块实例。

    2、在创建模块实例时,将调用模块的Init方法并自行初始化。

    3、在Init方法中,订阅需要的各种应用程序事件

    4、当应用程序事件被引发时,将调用模块中的相应方法。

    5、当模块的事件处理程序完成运行时,ASP会调用管道中的下一进程。这个可能是另一个模块,也可能是用于该请求的HTTP处理程序

    HTTP模块与Global.asax文件

    Global.asax 文件(也称为 ASP.NET 应用程序文件)是一个可选的文件,该文件包含响应 ASP.NET 或 HTTP 模块所引发的应用程序级别和会话级别事件的代码。

      HTTP模块 Global文件
    优点 模块可以封装,因此可以在创建一个次后在许多不同的应用程序中使用,通过将它们添加到全局程序集缓存并将它们注册到Machineconfig文件中,可以跨应用程序重新使用它们. 在于可以处理其他已注册事件,如Session_Start和Session_End,此外Global文件还允许实例化可在整个应用程序中使用的全局对象.
    使用条件
  • 希望在其他应用程序中重用该模块。

  • 希望避免将复杂代码放在 Global.asax 文件中。

  • 该模块应用于管道中的所有请求(仅限 IIS 7.0 集成模式)。

  • 当必须订阅对于模块不可用的事件(如 Session_Start)时
    创建依赖应用程序事件的代码并且不需要跨应用程序重用代码时

    HTTP模块自定义的事件,可以在Global文件中订阅,比如说Session_Start,这个其实就是订阅了Session模块的Start事件.

    简单的讲就是这样子的.我在模块中定义了一个Event(事件),那我这个事件的处理函数是什么哪?我何时注册该事件?

    答:比如说我自定义了一个模块类叫SessionModule,然后这个模块里面我自定义了一个事件叫Start,使用Session的名字在web.config中注册该模块

        那么在Global.asax中声明一个名称为:Session_Start 这样子的函数,这样子就注册了模块注册名为Session的Start事件

        处理函数就是刚才定义的名称为 Session_Start 的函数.

    创建自定义HTTP模块的步骤

    1、创建实现IHttpModule接口的类。

    2、为Init方法编写一个处理程序。初始化方法应该初始化模块并订阅所需的任何应用程序事件。

    3、为已经订阅的事件编写代码。

    4、如果模块需要清理,还可选择实现Dispose方法。

    5、在Web.config文件中注册模块.

    请继续关注~~实现了自定义页眉和页脚的一个简单的HTTP模块

  • 相关阅读:
    20145308 《信息安全系统设计基础》第3周学习总结
    20145308 《信息安全系统设计基础》第2周学习总结
    20145308 《信息安全系统设计基础》第1周学习总结
    试验箱汇总
    20145202马超《JAVA》预备作业3
    20145202 《信息安全系统设计基础》第14周学习总结
    20145202马超《JAVA》预备作业1
    20145202马超《JAVA》预备作业
    20145202 《信息安全系统设计基础》第13周学习总结(2)
    M4中遇到的问题
  • 原文地址:https://www.cnblogs.com/fromchaos/p/1519143.html
Copyright © 2011-2022 走看看