下面是類的定義。
復制代碼 代碼如下:
using System;
using System.Web;
using System.Web.SessionState;
namespace QTJZ
{
public class Filters : IHttpModule, IRequiresSessionState
{
public void Dispose() { }
public void Init(HttpApplication application)
{
application.AcquireRequestState += new EventHandler(application_AcquireRequestState);
}
public void application_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication application = sender as HttpApplication;
HttpRequest request = application.Request;
HttpResponse response = application.Response;
string url=request.CurrentExecutionFilePath.Trim('/');
string suffix = request.CurrentExecutionFilePathExtension.Trim('.');
if (!url.Equals("Default.htm") && (suffix == "aspx" || suffix == "htm"))
{
object sessionObj = application.Context.Session == null ? null : application.Session["useID"];
if (sessionObj==null)
{
response.Redirect("~/Default.htm");
}
}
}
}
}
為了實現過濾的效果,Filters類需要實現IHttpMoeld接口,實現該接口需要有兩個方法,一個是Dispose,另一個是Init。Init的參數是一個HttpApplication類型的實例,利用這個實例注冊一些事件。由於現在要對URL進行過濾,因此注冊的是AcquireRequestState事件。類似事件羅列如下
BeginRequest
在 ASP.NET 響應請求時作為 HTTP 執行管線鏈中的第一個事件發生。
AuthenticateRequest
當安全模塊已建立用戶標識時發生。
AuthorizeRequest
當安全模塊已驗證用戶授權時發生。
ResolveRequestCache
在 ASP.NET 完成授權事件以使緩存模塊從緩存中為請求提供服務後發生,
從而繞過事件處理程序(例如某個頁或 XML Web services)的執行。
AcquireRequestState 當 ASP.NET 獲取與當前請求關聯的當前狀態(如會話狀態)時發生。 PreRequestHandlerExecute 恰好在 ASP.NET 開始執行事件處理程序(例如,某頁或某個 XML Web services)前發生。 PostRequestHandlerExecute 在 ASP.NET 事件處理程序(例如,某頁或某個 XML Web service)執行完畢時發生。 ReleaseRequestState 在 ASP.NET 執行完所有請求事件處理程序後發生。 該事件將使狀態模塊保存當前狀態數據。 UpdateRequestCache 當 ASP.NET 執行完事件處理程序以使緩存模塊存儲將用於從緩存為後續請求提供服務的響應時發生。 EndRequest 在 ASP.NET 響應請求時作為 HTTP 執行管線鏈中的最後一個事件發生。