首頁 >後端開發 >C#.Net教程 >ASP.NET中的URL過濾實作程式碼

ASP.NET中的URL過濾實作程式碼

高洛峰
高洛峰原創
2017-01-21 15:11:562308瀏覽

下面是類別的定義。

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事件。類似事件羅列如下

ASP.NET中的URL過濾實作程式碼

獲取要跳轉的url可以用request的CurrentExecutionFilePath屬性,而獲取請求文件的後綴可以用CurrentExecutionFilePathExtension,至於要按什麼規則來判斷,按需求而定。我這裡是在請求時判斷Session是否存在,不存在則跳轉回登陸頁面。由於要用到Session,打開頁面的時候會拋出異常,異常信息是“會話狀態在此上下文中不可用。”,在實現了IRequiresSessionState接口之後就沒有異常拋出了。

此外,還需要在設定檔Web.config的節點下加入以下程式碼 

<httpModules> 
<add name="filters" type="QTJZ.Filters"/> 
</httpModules>

其中type屬性則是上面Filters類別的完全限定名

更多ASP.NET中的URL過濾實現代碼相關文章請關注PHP中文網!
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn