• 如何使用 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.     

     

  • 相关阅读:
    1分钟快速生成用于网页内容提取的xslt
    Python即时网络爬虫项目: 内容提取器的定义
    Python读取PDF内容
    Golang基础(二)
    shell的sed命令
    matplotlib + pandas绘图
    关于字符编码:ascii、unicode与utf-8
    shell的sort命令
    shell的uniq命令
    shell的tr命令
  • 原文地址:https://www.cnblogs.com/tuyile006/p/888180.html
Copyright © 2020-2023  润新知