实现模块
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 应用程序:
a. | 打开 Internet 服务管理器。 | b. | 右键单击 Module 目录,然后单击属性。 | c. | 在目录选项卡上,单击创建。 | d. | 单击确定以关闭 Module 属性对话框。 |
|
配置系统
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.
|
转载于:https://www.cnblogs.com/tuyile006/archive/2007/09/10/888180.html