濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > ASP.NET過(guò)濾器的應(yīng)用方法介紹

ASP.NET過(guò)濾器的應(yīng)用方法介紹

熱門標(biāo)簽:凱立德導(dǎo)航官網(wǎng)地圖標(biāo)注 五常地圖標(biāo)注 地圖標(biāo)注和認(rèn)領(lǐng) 戶外地圖標(biāo)注軟件手機(jī)哪個(gè)好用 長(zhǎng)春呼叫中心外呼系統(tǒng)哪家好 萊蕪?fù)夂綦婁N機(jī)器人價(jià)格 鄭州400電話辦理 聯(lián)通 電銷語(yǔ)音自動(dòng)機(jī)器人 智能電話營(yíng)銷外呼系統(tǒng)

在J2EE Web開(kāi)發(fā)中有過(guò)濾器filter,該filter可以對(duì)指定的URL訪問(wèn)進(jìn)行攔截,并執(zhí)行過(guò)濾器的方法,根據(jù)實(shí)際應(yīng)用情況,在過(guò)濾器中修改請(qǐng)求的代碼、判斷會(huì)話信息,也可以做權(quán)限控制,總之這個(gè)過(guò)濾器是非常有意義的,也可以說(shuō)是責(zé)任鏈設(shè)計(jì)模式在J2EE中的一個(gè)應(yīng)用。

  那么在ASP.NET中是否也可以定義這樣的過(guò)濾器結(jié)構(gòu),并在過(guò)濾器中進(jìn)行相應(yīng)的邏輯操作呢?答案是肯定,本文將告訴你如果編寫一個(gè)過(guò)濾器,又如何配置到IIS的Web應(yīng)用之中。

過(guò)程一:如何編寫過(guò)濾器

  編寫過(guò)濾器,其實(shí)就是編寫一個(gè)過(guò)濾器的類,也就是編寫一個(gè)HttpModule模塊,這個(gè)過(guò)濾器應(yīng)該實(shí)現(xiàn)IHttpModule基類,并重寫Init方法,給你一個(gè)實(shí)際的例子如下:

這是一個(gè)PageFilter.cs

復(fù)制代碼 代碼如下:

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 方法中注冊(cè)HttpApplication
        // 通過(guò)委托方式注冊(cè)事件
        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;
        }
}


  需要說(shuō)明的是,“過(guò)濾器”也可以稱為是“攔截器”,即攔截整個(gè)HTTP請(qǐng)求/響應(yīng)的過(guò)程,因?yàn)檎麄€(gè)請(qǐng)求/響應(yīng)過(guò)程可以分為許多個(gè)階段,那么這里面就會(huì)涉及到一個(gè)問(wèn)題,也就是你的過(guò)濾器想攔截具體的哪一個(gè)階段,上面的Init函數(shù)中,可以自己定義想攔截的具體階段,例如上面攔截是產(chǎn)生請(qǐng)求會(huì)話的階段,AcquireRequestStat是這個(gè)狀態(tài)的代表,而攔截后對(duì)應(yīng)的處理函數(shù)為Application_AcquireRequestState,所以下面定義了一個(gè)Application_AcquireRequestState方法,在該方法中可以通過(guò)強(qiáng)制類型轉(zhuǎn)換獲得application、context、session、request、response等一系列對(duì)象,在獲得這些對(duì)象的基礎(chǔ)上,你就可以進(jìn)行核心業(yè)務(wù)邏輯的編寫了,例如獲得判斷當(dāng)前URL訪問(wèn)是否合法,檢查當(dāng)前訪問(wèn)是否為登錄后用戶的訪問(wèn)等等。

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

application.階段的標(biāo)準(zhǔn)名稱1 += new EventHandler(該階段對(duì)應(yīng)的處理方法名稱1);
application.階段的標(biāo)準(zhǔn)名稱2 += new EventHandler(該階段對(duì)應(yīng)的處理方法名稱2);
。。。

階段的標(biāo)準(zhǔn)名稱,是說(shuō)這些階段是有標(biāo)準(zhǔn)的名稱的,而且是application對(duì)象的標(biāo)準(zhǔn)屬性,例如上面AcquireRequestState,還有諸如BeginRequest、AuthenticateRequest、AuthorizeRequest、ResolveRequestCache、AcquireRequestState、PreRequestHandlerExecute、PostRequestHandlerExecute、ReleaseRequestState、UpdateRequestCache、EndRequest許多階段等等,這些階段都有特定的含義.

  該階段對(duì)應(yīng)的處理方法名稱,其實(shí)就是你自己定義對(duì)應(yīng)這個(gè)階段處理的方法,上面已有樣例,不再多解釋。

  還有一點(diǎn)需要特別注意,有那么多階段可以攔截,但是實(shí)際應(yīng)用中,我們攔截的往往也就一兩個(gè)階段,而且要注意有些服務(wù)器對(duì)象只有在特定的階段才可以攔截到,例如Session對(duì)象在BeginRequest階段中是沒(méi)有的,在AcquireRequestState及其以后階段中是有的,因此要根據(jù)實(shí)際需求來(lái)攔截具體的階段,這個(gè)是新手最容易遇到的問(wèn)題。

過(guò)程二:如何配置過(guò)濾

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

復(fù)制代碼 代碼如下:

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

  這樣其實(shí)就配置好了,然后發(fā)布網(wǎng)站生成dll等就可以了,到時(shí)后會(huì)自動(dòng)攔截URL訪問(wèn)的,不過(guò)要記住一點(diǎn),默認(rèn)情況下對(duì)于該應(yīng)用的所有請(qǐng)求都會(huì)被攔截,如果你指向攔截特定的請(qǐng)求,例如想只對(duì)aspx文件的請(qǐng)求進(jìn)行攔截,那么可以在過(guò)濾器邏輯中加入對(duì)文件后綴名的判斷,如果不是aspx的直接放過(guò)即可

您可能感興趣的文章:
  • asp.net core MVC 全局過(guò)濾器之ExceptionFilter過(guò)濾器(1)
  • 詳解ASP.NET MVC 常用擴(kuò)展點(diǎn):過(guò)濾器、模型綁定
  • ASP.NET mvc4中的過(guò)濾器的使用
  • Asp.Net MVC學(xué)習(xí)總結(jié)之過(guò)濾器詳解
  • asp.net core MVC 過(guò)濾器之ActionFilter過(guò)濾器(2)

標(biāo)簽:紅河 衢州 西寧 宣城 西藏 岳陽(yáng) 湖州 福州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET過(guò)濾器的應(yīng)用方法介紹》,本文關(guān)鍵詞  ASP.NET,過(guò)濾器,的,應(yīng)用,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP.NET過(guò)濾器的應(yīng)用方法介紹》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于ASP.NET過(guò)濾器的應(yīng)用方法介紹的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    沅江市| 绵竹市| 炎陵县| 浦江县| 汉中市| 准格尔旗| 蓬莱市| 眉山市| 汉川市| 开平市| 板桥市| 南丹县| 晋江市| 道真| 邳州市| 曲水县| 柳河县| 黎平县| 台南市| 临沭县| 陇南市| 乌拉特中旗| 潮安县| 墨竹工卡县| 广平县| 桃园县| 河北区| 迁西县| 景泰县| 海阳市| 顺平县| 新化县| 灌南县| 托克逊县| 邻水| 启东市| 凯里市| 依安县| 衡山县| 新闻| 定兴县|