HOW TO:使用 Visual C# .NET 创建 ASP.NET HTTP 模块 (From MSDN)

本文的发布号曾为 CHS307996
本文讨论一种 Microsoft 产品的 Beta 版本。本文中的信息按"原样"提供,如有更改恕不另行通知。

对于该 Beta 产品,Microsoft 不提供正式的产品支持。有关获取对 Beta 版本的支持的信息,请参阅 Beta 产品文件中包括的文档资料,或查看您下载此版本的站点。

有关本文的 Microsoft Visual Basic .NET 版本,请参阅 308000

本任务的内容

概要

本分步指南演示如何使用 Visual C# .NET 创建一个简单的自定义 HTTP 模块。本文演示如何创建、部署和配置该模块,以及如何在 Global.asax 文件中为该模块挂接事件。

返回页首

实现模块

  1. 新建一个名为 MyModule 的 Visual Studio .NET C# 类库项目。
  2. 设置一个对 System.Web.dll 程序库的引用。
  3. 给该类添加下面的指令:
    using System.Web;
  4. 重命名 SyncModule.cs 类,然后相应地更改类定义。
  5. 实现 IHttpModule 接口。您的类定义样式如下:
    public class SyncModule :IHttpModule
  6. 决定预订哪些事件。下面概括了可从 HttpApplication 对象中预订的事件:
    • AcquireRequestState:调用此事件可让模块获得或创建请求的状态(例如会话)。
    • AuthenticateRequest:当安全模块需要在处理请求前验证用户的身份时调用此事件。
    • AuthorizeRequest:当请求需要授权时可由安全模块调用此事件。此事件是在身份验证后调用的。
    • BeginRequest:调用此事件以通知一个模块新请求正在开始。
    • Disposed:调用此事件以通知该模块应用程序正由于某种原因而终止。允许模块执行内部清理。
    • EndRequest:调用此事件以通知该模块新请求正在结束。
    • Error:调用此事件通知模块在请求处理期间发生了错误。
    • PostRequestHandlerExecute:调用此事件以通知模块处理程序已完成请求的处理。
    • PreRequestHandlerExecute:调用此事件以通知模块,用于处理请求的处理程序正要被调用。
    • PreSendRequestContent:调用此事件以通知该模块,内容正要被发送到客户机。
    • PreSendRequestHeaders:调用此事件以通知该模块,HTTP 标头正要被发送到客户机。
    • ReleaseRequestState:调用此事件可让模块在处理程序已完成请求处理后释放状态。
    • ResolveRequestCache:在身份验证后调用此事件。缓存模块使用此事件确定请求是否应由其缓存处理,或者一个处理程序是否应处理请求。
    • UpdateRequestCache:在得到处理程序的一个响应后调用此事件。缓存模块应根据此响应来更新它们的缓存。
    本示例使用了 BeginRequest 事件。
  7. 请按下面的方式实现 IHttpModule 接口的 Init Dispose 方法:
    public void Init(HttpApplication app)
    {
       app.BeginRequest += new EventHandler(OnBeginRequest);
    }
    
    public void Dispose(){ }
  8. 按下面的方式为一个事件创建委派:
    public delegate void MyEventHandler(Object s, EventArgs e);
  9. 定义一个 MyEventHandler 类型的私有局部变量记录对此事件的引用:
    private MyEventHandler _eventHandler = null;
  10. 创建一个事件将该委派挂接到 Global.asax 文件中的方法或从 HttpApplication 对象继承而来的类。
    public event MyEventHandler MyEvent
    {
       add { _eventHandler += value; }
       remove { _eventHandler -= value; }
    }
  11. 创建 OnBeginRequest 方法,它挂接到 HttpApplication BeginRequest 事件:
    public void OnBeginRequest(Object s, EventArgs e)
    {
       HttpApplication app = s as HttpApplication;
       app.Context.Response.Write("Hello from OnBeginRequest in custom module.<br>");
       if(_eventHandler!=null)
          _eventHandler(this, null);
    }
  12. 编译该项目。
返回页首

部署模块

  1. 在 C:/Inetpub/Wwwroot 下新建一个名为 Module 的目录。
  2. 在新创建的 Module 目录下创建一个 Bin 子目录。结果形成的路径是 C:/Inetpub/Wwwroot/Module/Bin。
  3. 将 MyModule.dll 从您项目的 Bin/Debug 目录复制到 C:/Inetpub/Wwwroot/Module/Bin 目录。
  4. 按照下面的步骤将新的 Module 目录标记为一个 Web 应用程序:
    1. 打开 Internet 服务管理器。
    2. 右键单击 Module(模块)目录,然后单击属性
    3. 目录选项卡上,单击创建
    4. 单击确定以关闭模块属性对话框。
返回页首

配置系统

  1. 在 C:/Inetpub/Wwwroot/Module/ 目录下,新建一个名为 Web.config 的文件。
  2. 将下面的文本粘贴到 Web.config 文件中:
    <configuration>
       <system.web>
          <httpModules>
             <add name="MyModule" type="MyModule.SyncModule, MyModule" />
          </httpModules>
       </system.web>
    </configuration>
返回页首

测试模块

  1. 在 C:/Inetpub/Wwwroot/Module 目录下,新建一个名为 Test.aspx 的 .aspx 文件。
  2. 将下面的文本粘贴到 Test.aspx 文件中:
    <%@Page Language="C#"%>
    <% Response.Write("Hello from Test.aspx.<br>"); %>
  3. 在 C:/Inetpub/Wwwroot/Module 目录下,创建一个 Global.asax 文件。
  4. 将下面的代码粘贴到 Global.asax 文件中:
    <%@ Import Namespace="MyModule" %>
    
    <script language="C#" runat=server >
    protected void MyModule_OnMyEvent(Object src, EventArgs e)
    {	
      Context.Response.Write("Hello from MyModule_OnMyEvent called in Global.asax.<br>");
    }
    </script>
  5. 请求 Test.aspx 页。应该会看到下面几行文字:
    Hello from OnBeginRequest in custom module.
    Hello from MyModule_OnMyEvent called in Global.asax.
    Hello from Test.aspx.
返回页首

参考

有关 HttpHandlers 的其他信息,请单击下面的文章编号,以便查看 Microsoft Knowledge Base 中的文章:

307985 BETA-INFO:ASP.NET HTTP Modules and HTTP Handlers Overview(ASP.NET HTTP 模块和 HTTP 处理程序概述)

返回页首













这篇文章中的信息适用于:

  • Microsoft ASP .NET Beta 2
  • Microsoft Visual C# .NET Beta 2
最近更新:2001-10-26 (1.0)
关键字kbDSupport kbGrpDSASP kbhowto kbHOWTOmaster kbHttpRuntime KB307996
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值