国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET中的URL過濾實現代碼

2020-01-18 00:17:34
字體:
來源:轉載
供稿:網友

下面是類的定義。

復制代碼 代碼如下:

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 執行管線鏈中的最后一個事件發生。

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

此外,還需要在配置文件Web.config的 <system.web>節點下添加如下代碼
復制代碼 代碼如下:

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁津县| 小金县| 顺义区| 浦北县| 桃江县| 长兴县| 巴彦县| 邮箱| 峨山| 海城市| 西峡县| 沁水县| 三穗县| 馆陶县| 房产| 古浪县| 循化| 曲沃县| 武安市| 恭城| 惠水县| 新兴县| 神木县| 抚远县| 邛崃市| 南投市| 海安县| 龙川县| 商南县| 威宁| 华池县| 图们市| 多伦县| 太保市| 修文县| 富锦市| 盖州市| 乡宁县| 方正县| 五寨县| 固安县|