亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET頁面與IIS底層交互和工作原理詳解(第三回)

2019-11-17 01:33:58
字體:
來源:轉載
供稿:網友

asp.net頁面與IIS底層交互和工作原理詳解(第三回)

引言

Http 請求處理流程和Http Handler 介紹這兩篇文章里,我們首先了解了Http請求在服務器端的處理流程,隨后我們知道Http請求最終會由實現了IHttpHandler接口的類進行處理(應該記得Page類實現了IHttpHandler)。從Http 請求處理流程一文的最后的一幅圖中可以看到,在Http請求由IHttpHandler處理之前,它需要通過一系列的Http Module;在請求處理之后,它需要再次通過一系列的Http Module,那么這些Http Module是如何組成的?用來做什么呢?本文將對Http Module作以介紹。

Http Module概述

暫時先不考慮我們自己實現Http Module的情況。在.Net中,Http Module 是實現了IHttpModule接口的程序集。IHttpModule 接口本身并沒有什么好大寫特寫的,由它的名字可以看出,它不過是一個普普通通的接口而已。實際上,我們關心的是實現了這些接口的類,如果我們也編寫代碼實現了這個接口,那么有什么用途。一般來說,我們可以將Asp.Net中的事件分成三個級別,最頂層是 應用程序級事件、其次是頁面級事件、最下面是控件級事件,事件的觸發分別與 應用程序周期、頁面周期、控件周期緊密相關。 Http Module 的作用是與應用程序事件密切相關的。

我們通過Http Module在Http請求管道(Pipeline)中注冊期望對應用程序事件做出反應的方法,在相應的事件觸發的時候(比如說BeginRequest事件,它在應用程序收到一個Http請求并即將對其進行處理時觸發),便會調用Http Module注冊了的方法,實際的工作在這些方法中執行。.Net 本身已經有很多的Http Module,其中包括 表單驗證Module(FormsAuthenticationModule), session 狀態Module(SessionStateModule),輸出緩存Module (OutputCacheModule)等。

注冊 Http Module

在注冊我們自己編寫的 Http Module 之前,先來看看Asp.Net中已經有的HttpModule。與 Http Handler類似,我們需要打開機器上C:/WINDOWS/Microsoft.NET/Framework/ v2.0.50727/CONFIG 目錄下的 web.config 文件。找到 <httpModules/> 結點,應該可以看到下面的內容:

<httpModules> <add name="OutputCache" type="System.Web.Caching.OutputCacheModule" /> <add name="Session" type="System.Web.SessionState.SessionStateModule" /> <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" /> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" /> <add name="RoleManager" type="System.Web.Security.RoleManagerModule" /> <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />... 略</httpModules>

我們先從結點上看,type屬性與上一節所說的http handler結點的type屬性類似,都代表了相應的程序集。但是,與http handler 不同,module只提供了一個name屬性,沒有諸如 path這樣指定某一特定(或者用通配符 * 代表某一種類)文件的處理程序。這是與Module的特點相關的,我們知道 module 是響應應用程序周期中觸發的事件,對于所有提交到aspnet_isapi.dll的請求都一樣,即便請求只是像類似http://www.tracefact.net/images/logo.gif 這樣獲取一張圖片而已(對ISAPI進行過設置以后,默認aspnet_isapi.dll不接手圖片文件)。

與Http handler類似,在這冊我們自己的http module 時,假設類名為ModuleDemo,位于myNameSpace命名空間下,程序集名稱為myDll,我們只需將myDll.dll拷貝到Bin目錄下,并在站點的 web.config 文件 system.web 結點下創建 httpModules 結點:

<system.web> <httpModules> <add name="CustomModuleName" type="myNameSpace.ModuleDemo, myDll"/> </httpModules></system.web>

type屬性由分號“,”分為兩部分,前面是命名空間及類名,也就是類型名;后面是程序集名。如果我們將代碼創建在App_Code目錄中,則不需要再指定程序集名。

name屬性由我們自己命名,不一定與類名相同,此處我將它命名為“CustomModuleName”。我們可以通過應用程序(Httpapplication)的Modules屬性獲取HttpModuleCollection集合,然后通過name屬性,進一步獲取HttpModule對象。

通過name屬性,我們還可以在global.asax中文件中編寫自定義HttpModule暴露出的事件的處理程序,它采用的格式是:void ModuleName_EventName(object sender, EventArgs e)。我們將在后面做更詳細介紹。

Asp.Net 內置的 Http Modules

下面這張表格列出了C:/WINDOWS/Microsoft.NET/Framework/ v2.0.50727/CONFIG下的Web.Config中的 Asp.Net 內置的Http Modules 及其主要作用。

名稱

類型

功能

OutputCache

System.Web.Caching.OutputCacheModule

頁面級輸出緩存

Session

System.Web.SessionState.SessionStateModule

Session狀態管理

WindowsAuthentication

System.Web.Security.WindowsAuthenticationModule

用集成Windows身份驗證進行客戶端驗證

FormsAuthentication

System.Web.Security.FormsAuthenticationModule

用基于Cookie的窗體身份驗證進行客戶端身份驗證

PassportAuthentication

System.Web.Security.PassportAuthenticationModule

用MS護照進行客戶身份驗證

RoleManager

System.Web.Security.RoleManagerModule

管理當前用戶角色

UrlAuthorization

System.Web.Security.UrlAuthorizationModule

判斷用戶是否被授權訪問某一URL

FileAuthorization

System.Web.Security.FileAuthorizationModule

判斷用戶是否被授權訪問某一資源

AnonymousIdentification

System.Web.Security.AnonymousIdentificationModule

管理Asp.Net應用程序中的匿名訪問

PRofile

System.Web.Profile.ProfileModule

管理用戶檔案文件的創立 及相關事件

ErrorHandlerModule

System.Web.Mobile.ErrorHandlerModule

捕捉異常,格式化錯誤提示字符,傳遞給客戶端程序

我們將在后面用編程的方式來查看它。

IHttpModule接口

看了這么多理論知識,本節將開始動手寫點程序,實現自己的Http Module。我們首先需要看下IHttpModule 接口,它包括下面兩個方法:

public void Init(HttpApplication context);public void Dispose();

Init():這個方法接受一個HttpApplication對象,HttpApplication代表了當前的應用程序,我們需要在這個方法內注冊 HttpApplication對象暴露給客戶端的事件??梢?,這個方法僅僅是用來對事件進行注冊,而實際的事件處理程序,需要我們另外寫方法。

整個過程很好理解:

  • 當站點第一個資源被訪問的時候,Asp.Net會創建HttpApplication類的實例,它代表著站點應用程序,同時會創建所有在Web.Config中注冊過的Module實例。
  • 在創建Module實例的時候會調用Module的Init()方法。
  • 在Init()方法內,對想要作出響應的HttpApplication暴露出的事件進行注冊。(僅僅進行方法的簡單注冊,實際的方法需要另寫)。
  • HttpApplication在其應用程序周期中觸發各類事件。
  • 觸發事件的時候調用Module在其Init()方法中注冊過的方法。

NOTE:如果你不了解事件注冊等相關內容,請參閱C#中的委托與事件一文。

Dispose():它可以在進行垃圾回收之前進行一些清理工作。

綜上所述:實現一個 IHttpModule 的模板一般是這樣的:

public class ModuleDemo:IHttpModule{ public void Init(HttpApplication context) { // 注冊HttpApplication應用程序 BeginRequest 事件 // 也可以是其他任何HttpApplication暴露出的事件 context.BeginRequest += new EventHandler(context_BeginRequest); } void context_BeginRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; HttpContext context = application.Context; // 做些實際的工作,HttpContext對象都獲得了,剩下的基本可以自由發揮了 } public void Dispose() { }}

通過Http ModuleHttp請求輸出流中寫入文字

本例中,我們僅用BeginRequest事件和 EndRequest 事件對 Http Module 的使用作以說明。我們通過這個范例,了解 Http Module 基本的使用方法。

首先,請創建一個新的站點,在App_Code目錄中添加類文件: ModuleDemo.cs:

public class ModuleDemo:IHttpModule{ // Init方法僅用于給期望的事件注冊方法 public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(context_BeginRequest); context.EndRequest += new EventHandler(context_EndRequest); } // 處理BeginRequest 事件的實際代碼 void context_BeginRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; HttpContext context = application.Context; context.Response.Write("<h1 style='color:#00f'>來自HttpModule 的處理,請求到達</h1><hr>"); } // 處理EndRequest 事件的實際代碼 void context_EndRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; HttpContext context = application.Context; context.Response.Write("<hr><h1 style='color:#f00'>來自HttpModule的處理,請求結束</h1>"); } public void Dispose() { }}

上面的代碼很簡單,它注冊了 HttpApplication實例的 BeginRequest 事件

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人黑人xx视频免费观看| 欧美久久精品一级黑人c片| 成人免费视频97| 97精品久久久| 亚洲精品乱码久久久久久金桔影视| 精品国产一区二区三区四区在线观看| 中文字幕日韩综合av| 欧美日韩一区二区在线播放| 欧美色xxxx| 国产欧美日韩中文字幕在线| 日韩精品欧美国产精品忘忧草| 另类天堂视频在线观看| 欧美性生交xxxxx久久久| 日韩精品在线视频观看| 国产精品久久视频| 亚洲国产又黄又爽女人高潮的| 91久久综合亚洲鲁鲁五月天| 亚洲天堂免费在线| 日韩成人激情视频| 国产成人免费91av在线| 国产精品亚洲精品| 日韩免费在线看| 视频一区视频二区国产精品| 国产福利视频一区二区| 一区二区成人av| 2019日本中文字幕| 国产一区红桃视频| 国产精品极品尤物在线观看| 久久精品小视频| 国产成人精品在线| 欧美日韩中文在线| 国产精品亚洲美女av网站| 久久免费精品视频| 久久久国产影院| 亚洲精品www久久久| 国产精品嫩草视频| 国产免费一区二区三区在线能观看| 亚洲精品成人免费| 欧美自拍视频在线| 亚洲精品国产成人| 亚洲第一在线视频| 欧美精品九九久久| 91精品国产综合久久香蕉922| 麻豆国产精品va在线观看不卡| 成人精品久久久| 欧美日韩亚洲一区二区三区| 国产精品久久久久久久久久小说| 亚洲第一视频在线观看| 在线观看欧美成人| 国产色视频一区| 国产成人综合亚洲| 国产一区二区精品丝袜| 亚洲丁香久久久| 成人h片在线播放免费网站| 亚洲精品永久免费精品| 日韩av黄色在线观看| 久久久精品国产一区二区| 精品视频在线导航| 国产亚洲欧美另类中文| 日本国产欧美一区二区三区| 欧美日韩国产综合视频在线观看中文| 欧美成人激情在线| 久久久久久久影视| 宅男66日本亚洲欧美视频| 国产精品久久久av| 亚洲精品98久久久久久中文字幕| 日韩视频免费中文字幕| 国产精品一区二区3区| 91免费电影网站| 欧美日韩中文在线观看| 欧美成人精品不卡视频在线观看| 在线视频亚洲欧美| 成人性生交大片免费观看嘿嘿视频| 欧美美女18p| 午夜精品国产精品大乳美女| 国产精品 欧美在线| 亚洲aⅴ男人的天堂在线观看| 国产精品爽爽爽爽爽爽在线观看| 日本欧美中文字幕| 97视频免费在线看| 精品国产乱码久久久久酒店| 欧美精品激情blacked18| 亚洲视频视频在线| 中文日韩在线视频| 一个色综合导航| 亚洲精品网站在线播放gif| 清纯唯美亚洲综合| 一夜七次郎国产精品亚洲| 亚洲天堂第一页| 欧美激情性做爰免费视频| 亚洲国产成人爱av在线播放| 海角国产乱辈乱精品视频| 日韩欧美高清在线视频| 成人a免费视频| 久久精品国产亚洲精品| 久久久久久亚洲精品不卡| 精品中文视频在线| 日韩在线中文视频| 亚洲成人免费在线视频| 色伦专区97中文字幕| 亚洲成人网久久久| 欧美精品videos| 国产免费久久av| 91精品在线看| 欧美日韩国产专区| 欧美大秀在线观看| 美日韩精品免费观看视频| 亚州欧美日韩中文视频| 国产精品偷伦免费视频观看的| 欧美性猛交xxxx久久久| 国产一区二区丝袜高跟鞋图片| 国产亚洲精品久久久| 日本免费久久高清视频| 日本久久久久久久久久久| 原创国产精品91| 川上优av一区二区线观看| 日韩av网址在线| 欧美黄色小视频| 国产成人精品免费久久久久| 中文字幕亚洲欧美日韩2019| 国产色婷婷国产综合在线理论片a| 欧美日韩国产在线看| 国产精品免费一区二区三区都可以| 欧美国产高跟鞋裸体秀xxxhd| 国产在线观看精品一区二区三区| 高清在线视频日韩欧美| 夜夜嗨av一区二区三区四区| 51精品在线观看| 91精品在线观看视频| 亚洲日韩中文字幕| 2018国产精品视频| 久久中文字幕在线视频| 欧美老妇交乱视频| 中文字幕亚洲激情| 亚洲a∨日韩av高清在线观看| 国产精品久久中文| 亚洲一区二区三区sesese| 国产精品福利网站| 日本不卡高字幕在线2019| 亚洲电影av在线| 91视频88av| 日韩精品一区二区三区第95| 亚洲va国产va天堂va久久| 97精品视频在线播放| 欧美在线中文字幕| 国产日韩一区在线| …久久精品99久久香蕉国产| 欧美成人剧情片在线观看| 亚洲国产欧美一区二区三区同亚洲| 性欧美在线看片a免费观看| 亚洲美女激情视频| 亚洲国产天堂久久综合网| 色悠悠国产精品| 萌白酱国产一区二区| 久热爱精品视频线路一| 亚洲国产91精品在线观看| 国产视频欧美视频| 高清日韩电视剧大全免费播放在线观看| 亚洲aaaaaa| 尤物tv国产一区| 96国产粉嫩美女| 亚洲国产精品久久久久秋霞不卡| 欧美精品免费看| 福利微拍一区二区|