如何使用 Visual C# .NET 创建 ASP.NET HTTP 模块

实现模块

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 接口的 InitDispose 方法:

            
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 方法,该方法挂接到 HttpApplicationBeginRequest 事件:

            
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(
thisnull);
            }  
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.     

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值