透過自訂HttpModule連接HttpApplication事件

 

直接演示範例,解說如下。

一、新開一個Empty的web專案

 

二、額外新增預設的前端頁面與後端程式

 

三、撰寫Class1後端程式

using System;
using System.Web;

namespace WebApplication2
{
    public class Class1 : IHttpModule
    {
        public Class1()
        {
            // Class constructor.
        }

        public void Dispose()
        {
            // Add code to clean up the
            // instance variables of a module.
        }

        // Classes that inherit IHttpModule 
        // must implement the Init and Dispose methods.
        public void Init(HttpApplication app)
        {
            app.AcquireRequestState += new EventHandler(app_AcquireRequestState);
        }

        // Define a custom AcquireRequestState event handler.
        public void app_AcquireRequestState(object o, EventArgs ea)
        {
            HttpApplication httpApp = (HttpApplication)o;
            HttpContext ctx = HttpContext.Current;
            ctx.Response.Write("<p>Executing AcquireRequestState</p>");
        }
    }
}

既然是要自訂HttpModule則必先繼承IHttpModule介面,而且實作Dispose與Init方法。

public interface IHttpModule
{
    void Dispose();
    void Init(HttpApplication context);
}

接下來則於HttpApplication類別的AcquireRequestState事件註冊自訂事件,

整個Class1.cs就是自訂HTTP模組,而這個模組的功能為在AcquireRequestState事件被觸發時,

對頁面寫下一段文字。

 

四、修改Web.config

注意,需要在Web.config內登錄自訂HTTP模組名稱,

才能讓IIS在每個request都呼叫web.config上所登錄的managed-code modules。

如果你的IIS環境是7.0以上的話,通常預設為Integrated mode,則適用以下設定

<configuration>
  <system.webServer>
    <modules>
      <add type="WebApplication2.Class1" name="Class1" />
    </modules>
  </system.webServer>
</configuration>

 

參考資料:

HttpApplication 類別

Modules <modules>

IIS Configuration Reference

使用 HTTP 處理常式自訂 ASP.NET 處理序

用Asp.net写自己的服务框架

ASP.NET MVC 開發心得分享 (23):反向表列路由限制的語法