文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 专题 求职 读书
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» .Net » 如何使用 Visual C# .NET 创建 ASP.NET HTTP 模块       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: [转载] 如何使用 Visual C# .NET 创建 ASP.NET HTTP 模块  ( 查看:285  回复:0 )   
 
Easy
助理工程师  点击可查看详细



帖子 365
精华 2
无忧币 1780
积分 1619
阅读权限 40
注册日期 2007-11-6
最后登录 2008-5-5 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2007-11-26 13:22   标题:如何使用 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 接口的 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.



论坛活动:测测你对IT技术大会的了解指数(赠微软礼品、无忧币)
2007-11-26 13:221楼
[ 顶部 ]
     
论坛跳转:  

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号