下面是類別的定義。
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事件。類似事件羅列如下
獲取要跳轉的url可以用request的CurrentExecutionFilePath屬性,而獲取請求文件的後綴可以用CurrentExecutionFilePathExtension,至於要按什麼規則來判斷,按需求而定。我這裡是在請求時判斷Session是否存在,不存在則跳轉回登陸頁面。由於要用到Session,打開頁面的時候會拋出異常,異常信息是“會話狀態在此上下文中不可用。”,在實現了IRequiresSessionState接口之後就沒有異常拋出了。
此外,還需要在設定檔Web.config的
<httpModules> <add name="filters" type="QTJZ.Filters"/> </httpModules>
其中type屬性則是上面Filters類別的完全限定名
更多ASP.NET中的URL過濾實現代碼相關文章請關注PHP中文網!