在J2EE Web開發(fā)中有過濾器filter,該filter可以對指定的URL訪問進行攔截,并執(zhí)行過濾器的方法,根據(jù)實際應用情況,在過濾器中修改請求的代碼、判斷會話信息,也可以做權限控制,總之這個過濾器是非常有意義的,也可以說是責任鏈設計模式在J2EE中的一個應用。
那么在ASP.NET中是否也可以定義這樣的過濾器結(jié)構(gòu),并在過濾器中進行相應的邏輯操作呢?答案是肯定,本文將告訴你如果編寫一個過濾器,又如何配置到IIS的Web應用之中。
過程一:如何編寫過濾器
編寫過濾器,其實就是編寫一個過濾器的類,也就是編寫一個HttpModule模塊,這個過濾器應該實現(xiàn)IHttpModule基類,并重寫Init方法,給你一個實際的例子如下:
這是一個PageFilter.cs
代碼如下:
using System;
using System.Web;
using System.Web.SessionState;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;
public class PageFilter: IHttpModule
{
public String ModuleName
{
get { return "PageFilter"; }
}
//在 Init 方法中注冊HttpApplication
// 通過委托方式注冊事件
public void Init(HttpApplication application)
{
application.AcquireRequestState += new EventHandler(Application_AcquireRequestState);
}
private void Application_AcquireRequestState(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
HttpSessionState session = context.Session;
HttpRequest request = context.Request;
HttpResponse response = context.Response;
String contextPath = request.ApplicationPath;
}
}
需要說明的是,“過濾器”也可以稱為是“攔截器”,即攔截整個HTTP請求/響應的過程,因為整個請求/響應過程可以分為許多個階段,那么這里面就會涉及到一個問題,也就是你的過濾器想攔截具體的哪一個階段,上面的Init函數(shù)中,可以自己定義想攔截的具體階段,例如上面攔截是產(chǎn)生請求會話的階段,AcquireRequestStat是這個狀態(tài)的代表,而攔截后對應的處理函數(shù)為Application_AcquireRequestState,所以下面定義了一個Application_AcquireRequestState方法,在該方法中可以通過強制類型轉(zhuǎn)換獲得application、context、session、request、response等一系列對象,在獲得這些對象的基礎上,你就可以進行核心業(yè)務邏輯的編寫了,例如獲得判斷當前URL訪問是否合法,檢查當前訪問是否為登錄后用戶的訪問等等。
新聞熱點
疑難解答
圖片精選