一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET過濾器的應用方法介紹

ASP.NET過濾器的應用方法介紹

2019-11-12 13:26asp.net教程網 ASP.NET教程

ASP.NET過濾器的應用方法介紹,需要的朋友可以參考一下

在J2EE Web開發中有過濾器filter,該filter可以對指定的URL訪問進行攔截,并執行過濾器的方法,根據實際應用情況,在過濾器中修改請求的代碼、判斷會話信息,也可以做權限控制,總之這個過濾器是非常有意義的,也可以說是責任鏈設計模式在J2EE中的一個應用。

  那么在ASP.NET中是否也可以定義這樣的過濾器結構,并在過濾器中進行相應的邏輯操作呢?答案是肯定,本文將告訴你如果編寫一個過濾器,又如何配置到IIS的Web應用之中。

過程一:如何編寫過濾器

  編寫過濾器,其實就是編寫一個過濾器的類,也就是編寫一個HttpModule模塊,這個過濾器應該實現IHttpModule基類,并重寫Init方法,給你一個實際的例子如下:

這是一個PageFilter.cs 

復制代碼代碼如下:


using System;
using System.Web;
using System.Web.SessionState;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.IO;

 

public class PageFilter: IHttpModule
{
        public String ModuleName
        {
            get { return "PageFilter"; }
        }

        //在 Init 方法中注冊HttpApplication 
        // 通過委托方式注冊事件
        public void Init(HttpApplication application)
        {
            application.AcquireRequestState += new EventHandler(Application_AcquireRequestState);            
        }

  private void Application_AcquireRequestState(Object source, EventArgs e)

        {

            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            HttpSessionState session = context.Session;
            HttpRequest request = context.Request;
            HttpResponse response = context.Response;
            String contextPath = request.ApplicationPath;
        }
}


  需要說明的是,“過濾器”也可以稱為是“攔截器”,即攔截整個HTTP請求/響應的過程,因為整個請求/響應過程可以分為許多個階段,那么這里面就會涉及到一個問題,也就是你的過濾器想攔截具體的哪一個階段,上面的Init函數中,可以自己定義想攔截的具體階段,例如上面攔截是產生請求會話的階段,AcquireRequestStat是這個狀態的代表,而攔截后對應的處理函數為Application_AcquireRequestState,所以下面定義了一個Application_AcquireRequestState方法,在該方法中可以通過強制類型轉換獲得application、context、session、request、response等一系列對象,在獲得這些對象的基礎上,你就可以進行核心業務邏輯的編寫了,例如獲得判斷當前URL訪問是否合法,檢查當前訪問是否為登錄后用戶的訪問等等。

 

  另外既然有攔截的整個過程有許多階段,那么如何攔截其它的階段呢?這個應該很簡單了,與上面類似在Init中按如下邏輯定義即可:

application.階段的標準名稱1 += new EventHandler(該階段對應的處理方法名稱1); 
application.階段的標準名稱2 += new EventHandler(該階段對應的處理方法名稱2); 
。。。

階段的標準名稱,是說這些階段是有標準的名稱的,而且是application對象的標準屬性,例如上面AcquireRequestState,還有諸如BeginRequest、AuthenticateRequest、AuthorizeRequest、ResolveRequestCache、AcquireRequestState、PreRequestHandlerExecute、PostRequestHandlerExecute、ReleaseRequestState、UpdateRequestCache、EndRequest許多階段等等,這些階段都有特定的含義.

  該階段對應的處理方法名稱,其實就是你自己定義對應這個階段處理的方法,上面已有樣例,不再多解釋。

  還有一點需要特別注意,有那么多階段可以攔截,但是實際應用中,我們攔截的往往也就一兩個階段,而且要注意有些服務器對象只有在特定的階段才可以攔截到,例如Session對象在BeginRequest階段中是沒有的,在AcquireRequestState及其以后階段中是有的,因此要根據實際需求來攔截具體的階段,這個是新手最容易遇到的問題。

過程二:如何配置過濾

  我們編寫好了一個.cs文件的過濾器,那么如何讓這個過濾器起作用呢,這個需要進行配置,默認肯定是不會攔截的,你需要將該過濾器配置到應用的Web.config文件之中,上述樣例的配置如下:

復制代碼代碼如下:

<configuration>
<system.web>
 <httpModules>
   <add name="pageModule" type="PageFilter"/>
 </httpModules>
</system.web>
</configuration>

 

  這樣其實就配置好了,然后發布網站生成dll等就可以了,到時后會自動攔截URL訪問的,不過要記住一點,默認情況下對于該應用的所有請求都會被攔截,如果你指向攔截特定的請求,例如想只對aspx文件的請求進行攔截,那么可以在過濾器邏輯中加入對文件后綴名的判斷,如果不是aspx的直接放過即可.

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产青草视频在线观看免费影院 | 精品亚洲视频在线观看 | 99国产精品久久久久久久... | 香蕉 在线播放 | 青青成人在线 | 久久精品国产亚洲AV蜜臀 | 192.168.191| 日韩日韩日韩手机看片自拍 | 亚洲九九九 | 色五夜婷婷| 国产精品国产三级国产专区不 | 欧美骚熟 | 99热成人精品免费久久 | 91麻豆精品国产自产在线观看 | 亚洲AV精品无码喷水直播间 | 亚洲AV无码A片在线观看蜜桃 | 日本男男漫画 | 国产成人无精品久久久 | 青青草国产免费久久久91 | 国产一区二区免费福利片 | 青青青在线视频播放 | 青青草原免费在线视频 | 母爱成瘾在线观看 | 亚洲国产精品婷婷久久久久 | 成人在线免费看 | 亚洲男人的天堂网 | 四虎永久网址影院 | 四虎国产精品免费久久久 | 午夜宅男网 | 我的漂亮朋友在线观看全集免费 | 双性np玩烂了np欲之国的太子 | 日韩经典在线观看 | 美女被到爽流动漫 | 天美影视文化传媒mv免费 | 男女天堂 | 国产欧美日韩精品一区二区三区 | 黄+色+性+人免费 | 午夜精品久久久久久 | 国产精品亚洲专区在线播放 | 国内精品久久久久久野外 | 精品久久久久久久久免费影院 |