天天看點

HttpHandler(1)

概述 HttpHandler是一個HTTP請求的真正進行中心,也正是在這個HttpHandler容器中,ASP.NET Framework才真正地對用戶端請求的伺服器頁面做出編譯和執行,并将處理過後的資訊附加在HTTP請求資訊流中再次傳回到HttpModule中。   IHttpHandler 是什麼 IHttpHandler定義了如果要實作一個HTTP請求的處理所必需實作的一些系統約定。HttpHandler與HttpModule不同,一旦定義了自己的HttpHandler類,那麼它對系統的HttpHandler的關系将是“覆寫”關系。   IHttpHandler 如何處理 HTTP 請求 當一個HTTP請求經同HttpModule容器傳遞到HttpHandler容器中時,ASP.NET Framework會調用HttpHandler的ProcessRequest成員方法來對這個HTTP請求進行真正的處理。以一個ASPX頁面為例,正是在這裡一個ASPX頁面才被系統處了解析,并将處理完成的結果繼續經由HttpModule傳遞下去,直至到達用戶端。 對于ASPX頁面,ASP.NET Framework在預設情況下是交給System.Web.UI.PageHandlerFactory這個HttpHandlerFactory來處理的。所謂一個HttpHandlerFactory,所謂一個HttpHandlerFactory,是指當一個HTTP請求到達這個HttpHandler Factory時,HttpHandlerFactory會提供出一個HttpHandler容器,交由這個HttpHandler容器來處理這個HTTP請求。 一個HTTP請求都是最終交給一個HttpHandler容器中的ProcessRequest方法來處理的。

HttpHandler(1)

圖1:ProcessRequest方法  

一個簡單的 HttpHandler 容器 通過實作IHttpHandler接口可以建立自定義HTTP處理程式,該接口隻包含兩個方法。通過調用IsReusable,IHttpHandlerFactory可以查詢處理程式以确定是否可以使用同一執行個體為多個請求提供服務。ProcessRequest方法将HttpContext執行個體用作參數,這使它能夠通路Request和Response内部對象。在一個HttpHandler容器中如果需要通路Session,必須實作IRequiresSessionState接口,這隻是一個标記接口,沒有任何方法。

示例1: using System; using System.Collections.Generic; using System.Text; using System.Web; using System.Web.SessionState;   namespace MyHandler {     ///<summary>     /// 目的:實作一個簡單的自定義HttpHandler容器     /// 作者:文野     /// 聯系:[email protected]     ///</summary>     public class MyFirstHandler : IHttpHandler,IRequiresSessionState     {         #region IHttpHandler 成員           public bool IsReusable         {             get { return true; }         }           public void ProcessRequest(HttpContext context)         {             context.Response.Write("<h1><b>Hello HttpHandler</b></h1>");             context.Session["Test"] = " 測試HttpHandler容器中調用Session" ;             context.Response.Write(context.Session["Test"]);         }           #endregion     } } 在Web.config中加入如下配置: < httpHandlers >      < add verb = "*"path="*"type="MyHandler.MyFirstHandler, MyHandler"/> </ httpHandlers >

HttpHandler(1)