下面是類的定義。
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的 <system.web>節點下添加如下代碼
<httpModules> <add name="filters" type="QTJZ.Filters"/> </httpModules>
其中type屬性則是上面Filters類的完全限定名
更多ASP.NET中的URL過濾實現代碼相關文章請關注topic.alibabacloud.com!