HTTP Module的实现

简介:

有两种方法,本质是一样的。一种是写代码,把实现IHttpModule接口的类放在App_Code文件夹中。还有一种方法是直接把该类放到一个项目中,编译后得到的dll放入Bin文件夹。

具体步骤如下:

http://support.microsoft.com/kb/307996 参考

实现 IHttpModule 接口。您的类定义应如下所示:

public class HelloWorldModule: IHttpModule

决定要预订哪些事件。下表概括了可从  HttpApplication 对象预订的事件:
  • AcquireRequestState:调用此事件可允许模块获取或创建请求的状态(例如,会话)。
  • AuthenticateRequest:当安全模块在处理请求前需要对用户进行身份验证时,调用此事件。
  • AuthorizeRequest:当请求需要经过授权时,安全模块就会调用此事件。此事件是在身份验证后调用的。
  • BeginRequest:调用此事件以通知模块新请求即将开始。
  • Disposed:调用此事件以通知模块由于某种原因应用程序即将终止。允许模块进行内部清理。
  • EndRequest:调用此事件以通知模块该请求即将结束。
  • Error:调用此事件以通知模块在请求处理过程中发生了错误。
  • PostRequestHandlerExecute:调用此事件以通知模块处理程序已完成对请求的处理。
  • PreRequestHandlerExecute:调用此事件以通知模块将调用用于处理请求的处理程序。
  • PreSendRequestContent:调用此事件以通知模块将向客户端发送请求内容。
  • PreSendRequestHeaders:调用此事件以通知模块将向客户端发送 HTTP 头。
  • ReleaseRequestState:调用此事件以允许模块在处理程序完成对请求的处理后释放状态。
  • ResolveRequestCache:在身份验证后调用此事件。缓存模块使用此事件确定该请求是否应该由其缓存处理,或者处理程序是否应该处理该请求。
  • UpdateRequestCache:在处理程序响应后调用此事件。缓存模块应根据该响应来更新其缓存。
本示例使用了  BeginRequest 事件。 按以下方式实现  IHttpModule 接口的  Init 和  Dispose 方法:

public void Init(HttpApplication application) 
   { 
       application.BeginRequest += 
           (new EventHandler(this.Application_BeginRequest)); 
       application.EndRequest += 
           (new EventHandler(this.Application_EndRequest)); 
   }

public void Dispose(){ }

定义这两个事件方法:

private void Application_BeginRequest(Object source, 
         EventArgs e) 
    { 
        HttpApplication application = (HttpApplication)source; 
        HttpContext context = application.Context; 
            context.Response.Write("<h1><font color=red>" + 
                "HelloWorldModule: Beginning of Request" + 
                "</font></h1><hr>"); 
    }

    private void Application_EndRequest(Object source, EventArgs e) 
    { 
         HttpApplication application = (HttpApplication)source; 
        HttpContext context = application.Context; 
            context.Response.Write("<hr><h1><font color=red>" + 
                "HelloWorldModule: End of Request</font></h1>"); 
    }

配置web.config文件

<configuration>

<system.web>

<httpModules>

<add name="HelloWorldModule" type="HelloWorldModule"/> 如果用的是引用项目的话,<add name="HelloWorldModule" type="HelloWorldModule.HelloWorldModule,HelloWorldModule"/>

</httpModules>

</system.web>

</configuration>

然后在执行页面的时候,都会执行这2个注册的事件。













本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/591824,如需转载请自行联系原作者




相关文章
|
Web App开发 .NET Windows
|
负载均衡 JavaScript 前端开发
《深入理解Nginx:模块开发与架构解析》一2.5 用HTTP proxy module配置一个反向代理服务器
本节书摘来自华章出版社《深入理解Nginx:模块开发与架构解析》一书中的第2章,第2.5节,作者 陶辉,更多章节内容可以访问云栖社区“华章计算机”公众号查看
2073 0
|
前端开发 .NET 开发者
控制器 - URL routing HTTP module(一)
URL routing HTTP module 负责处理检查入站请求的 URL,并将它们分派到最合理的处理器上。URL routing HTTP module 也替代了旧版本的 ASP.NET URL 重写特性。
883 0
|
Web App开发 .NET Windows
[转贴]Http Module 介绍
引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进行处理(应该记得Page类实现了IHttpHandler)。
748 0
|
存储 Web App开发 监控
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
我们以前使用过的对hbase和hdfs进行健康检查,及剩余hdfs容量告警,简单易用 1.针对hadoop2的脚本: #/bin/bashbin=`dirname $0`bin=`cd $bin;pwd`STATE_OK=...
1016 0
|
Web App开发 新零售 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.尽可能地了解需求,系统层面适用开闭原则 2.模块化,低耦合,能快速响应变化,也可以避免一个子系统的问题波及整个大系统 3.
713 0
|
Web App开发 存储 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
      前段时间公司hadoop集群宕机,发现是namenode磁盘满了, 清理出部分空间后,重启集群时,重启失败。 又发现集群Secondary namenode 服务也恰恰坏掉,导致所有的操作log持续写入edits.new 文件,等集群宕机的时候文件大小已经达到了丧心病狂的70G+..重启集群报错 加载edits文件失败。
856 0
|
Web App开发 前端开发 Android开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
使用MAT分析内存泄露 对于大型服务端应用程序来说,有些内存泄露问题很难在测试阶段发现,此时就需要分析JVM Heap Dump文件来找出问题。
745 0