ASP.NET HTTP模組和處理常式(3)

來源:互聯網
上載者:User
ASP.NET運行時對HTTP處理常式的使用方式
  
    無論你是否相信,ASP.NET都使用HTTP請求實現了大量的自己的功能。ASP.NET使用處理常式來處理.aspx、 .asmx、 .soap和其它ASP.NET檔案。
  
    下面是machine.config檔案中的一個片段:
  
  <httpHandlers>
   <add verb="*" path="trace.axd" type="System.Web.Handlers.TraceHandler"/>
   <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory"/>
   <add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory"/>
   <add verb="*" path="*.config" type="System.Web.HttpForbiddenHandler"/>
   <add verb="GET,HEAD" path="*" type="System.Web.StaticFileHandler"/>
   . . . . . .
   . . . . . .
  </httpHandlers>
  
    在上面的配置資訊中你可以看到對.aspx檔案的所有請求都由System.Web.UI.PageHandlerFactory類來處理。與此類似,對.config檔案和其它檔案(它們不能被用戶端直接存取)的所有請求都由System.Web.HttpForbiddenHandler類處理。你可能已經猜到,當訪問這些檔案的時候,該類簡單地給用戶端返回一個錯誤資訊。
  
    執行HTTP處理常式
  
    現在你將看到如何?一個HTTP處理常式。那麼我們的新處理常式要做什麼任務呢?前面我提到,處理常式大多數用於給Web伺服器添加新功能;因此,我將建立一個處理常式來處理新的檔案類型——副檔名為.15seconds的檔案。我們建立了這個處理常式並在我們的Web應用程式的web.config檔案中註冊之後,所有對.15seconds檔案的請求都將由這個新處理常式來處理。
  
    你可能正在考慮這個處理常式的使用方法。如果你希望引入一種新的伺服器指令碼語言或動態伺服器檔案(例如asp、aspx)該怎麼辦呢?你可以為它編寫一個自己的處理常式。類似地,如果你希望在IIS上運行Java小程式、JSP和其它一些伺服器端Java組件應該怎麼辦呢?一種方法是安裝某些ISAPI擴充(例如Allaire或Macromedia Jrun)。你也可以編寫自己的HTTP處理常式。儘管這對於第三方廠商(例如Allaire和Macromedia)來說是很複雜的事務,但是它卻是個很有吸引力的選擇,因為它們的HTTP處理能夠能夠訪問ASP.NET運行時暴露的所有新功能。
  
    實現我們的HTTP處理常式包含以下步驟:
  
    1.編寫一個實現IHttpHandler介面的類。
  
    2. 在web.config或machine.config檔案中註冊這個處理常式。
  
    3.在Internet服務管理員中把檔案擴充(.15seconds)映射到ASP.NET ISAPI擴充DLL(aspnet_isapi.dll)上。
  
    第一步
  
    在Visual Studio.NET中建立一個新的C#類庫項目,並把它命名為“MyHandler”。Visual Studio.NET將自動地給項目添加一個叫做“Class1.cs”的類。把它改名為“NewHandler”;在代碼視窗中開啟這個類,並把類的名稱和建構函式的名稱改成“NewHandler”。
  
    下面是NewHandler類的代碼:
  
  using System;
  using System.Web;
  
  namespace MyHandler
  {
   public class NewHandler : IHttpHandler
   {
    public NewHandler()
    {
     // TODO: 此處添加構造邏輯
    }
  
    #region Implementation of IHttpHandler
    public void ProcessRequest(System.Web.HttpContext context)
    {
     HttpResponse objResponse = context.Response ;
     objResponse.Write("<html><body><h1>Hello 15Seconds Reader ") ;
     objResponse.Write("</body></html>") ;
    }
  
    public bool IsReusable
    {
     get
     {
      return true;
     }
    }
    #endregion
   }
  }
  
    你在ProcessRequest方法中可以看到,該HTTP處理常式通過System.Web.HttpContext對象訪問了所有作為參數傳遞給它的ASP.NET內部對象。實現ProcessRequest方法只需要簡單地從context對象中提取HttpResponse對象並把發送一些HTML給用戶端。類似地,IsReusable返回true,表明這個處理常式可以被重複用作處理其它的HTTP請求。
  
    我們編譯上面的代碼並把它放到webapp虛擬目錄的bin目錄之中。
  
    第二步
  
    在web.config檔案中通過添加下面的文本來註冊這個處理常式:
  
  <httpHandlers>
   <add verb="*" path="*.15seconds" type="MyHandler.NewHandler,MyHandler"/>
  </httpHandlers>
  
    第三步
  
    由於我們已經建立了用於處理新擴充檔案的處理常式了,我們還需要把這個副檔名告訴IIS並把它映射到ASP.NET。如果你不執行這個步驟而試圖訪問Hello.15seconds檔案,IIS將簡單地返回該檔案而不是把它傳遞給ASP.NET運行時。其結果是該HTTP處理常式不會被調用。
  
    運行Internet服務管理員,右鍵點擊預設Web網站,選擇屬性,移動到Home目錄選項頁,並點擊配置按鈕。應用程式配置對話方塊彈出來了。點擊添加按鈕並在可執列欄位輸入aspnet_isapi.dll檔案路徑,在擴充欄位輸入.15seconds。其它欄位不用處理;該對話方塊如下所示:
  
  
  
  點擊確認按鈕關閉應用程式配置和預設Web網站屬性對話方塊。
  
    現在我們運行Internet Explorer並輸入url:http://localhost/webapp/hello.15seconds,看到的頁面如下:
    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.