ASP.Net 運行機制以及HttpModule和HttpHandler

 ASP.Net 運行機制


        1.使用動態Web開發技術


        2.客戶端通過瀏覽器輸入地址,請求該動態頁面


        3.Web服務器根據客戶端的請求,對Web應用程序進行編譯或解釋,並生成HTML流,返回給客戶端


        4.客戶端瀏覽器解釋HTML流,並顯示爲Web頁面
        


        當請求發送至服務器IIS並被其接收後,IIS服務器會判斷請求文件的類型,
        如果是靜態文件 如HTML 圖片或Text IIS會自行根據目錄找到文件併發送給客戶端
        如果是動態文件 ASP頁面 則IIS會通過aspnet_isapi.dll將請求轉交給ASP.Net運行時環
境進行處理,最終的處理結果會返回給IIS,發送給客戶端

        
        ASP.Net運行時環境中處理請求是通過一系列對象來完成的,包含HttpApplication,HttpModule, HttpHandler


        通過使用HttpApplication對象來處理到的請求,HttpApplication對象每次只能處理一個請求,這樣其成員纔可以於儲存針對每個請求的數據
      

        

節點配置關鍵字

verb  代表謂詞 get oist 和ftp等   其中*爲通配符 表示所有請求

    path  訪問路徑  表示只要請求path屬性指定的文件 都將有type屬性決定的Http
Handler類進行處理

   type  用逗號分隔的類或程序集 asp.net首先在應用程序的專用的Bin
目錄中進行
搜索,如果未找到,則繼續搜索系統程序集緩存

 HttpModule

        對於HTTP請求而言,HttpModule是HTTP請求的“必經之路”,它可以在該HTTP請

求傳遞到最終的“請求處理中心”(HttpHandler)進行處理之前做一些額外的工作或

在某些情況下終止HTTP請求
        
        HttpModule有多個,每次HTTP請求都將逐一通過每個HttpModule
        HttpModule和HttpAlication對象是直接交互的
        

        
        HttpModule有多個,每次HTTP請求都將逐一通過每個HttpModule
        HttpModule和HttpAlication對象是直接交互的
        

//類

pS:不想引用命名空間 可以把類的命名空間刪除

namespace ch2
{
    public class TestHttpModule : IHttpModule
    {
        //資源釋放
        public void Dispose()
        {
            throw new NotImplementedException();
        }
        //初始化工作
        public void Init(HttpApplication context)
        {
            //初始化 context  綁定兩個事件
            context.BeginRequest += context_BeinRequest;
            context.EndRequest += context_EndRequest;
        }

        //在請求處理之前,附加信息
        public void context_BeinRequest(object sender,EventArgs e)
        {
            HttpApplication application = sender as HttpApplication;
            application.Response.Write("<P>開始</P>");
        }

        //在請求處理之後,附加信息
        public void context_EndRequest(object sender, EventArgs e)
        {
            HttpApplication application = sender as HttpApplication;
            application.Response.Write("<P>結束</P>");
        }
    }
}


 //配置節點 

以項目文件爲起始點

<system.webServer>
    <!--HttpModule對象-->
    <modules>
      <add name="test"  type="ch2.TestHttpModule"  />
    </modules> 
</system.webServer>


HttpHandler

        每個HTTP請求都可能經過多個HttpModule處理,然而最終的處理中心是HttpHandler
        
        一個HTTP請求最終是交給HttpHandler對象的ProcessRequest方法進行處理
        與創建的HttpModule類不同
        VS提供了創建HttpHandler類的模版即一般處理程序(.ashx)

//類

namespace ch2
{
    public class TestHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            context.Response.Write("1111111111111111");
        }
    }
}


//配置節點

 <system.webServer>
<handlers>
      <add verb="=*" path="ad/*.aspx"  name="handler"  type="ch2.TestHandler"/>
 </handlers>
</system.webServer>



發佈了44 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章