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

來源:互聯網
上載者:User
ASP.NET請求的處理過程
  
    ASP.NET請求處理過程是基於管道模型的,在模型中ASP.NET把http請求傳遞給管道中的所有模組。每個模組都接收http請求並有完全控制許可權。模組可以用任何自認為適合的方式來處理請求。一旦請求經過了所有HTTP模組,就最終被HTTP處理常式處理。HTTP處理常式對請求進行一些處理,並且結果將再次經過管道中的HTTP模組:
  
  請注意在http請求的處理過程中,只能調用一個HTTP處理常式,然而可以調用多個HTTP模組。
  
    Http處理常式
  
    HTTP處理常式是實現了System.Web.IHttpHandler介面的.NET組件。任何實現了IHttpHandler介面的類都可以用於處理輸入的HTTP請求。HTTP處理常式與ISAPI擴充有些類似。HTTP處理常式和ISAPI擴充的差別在於在URL中可以使用HTTP處理常式的檔案名稱直接調用它們,與ISAPI擴充類似。
  
    HTTP處理常式實現了下列方法:
  
  方法名稱 描述
  ProcessRequest 這個方法實際上是http處理常式的核心。我們調用這個方法來處理http請求。
  IsReusable 我們調用這個屬性來決定http處理常式的執行個體是否可以用於處理相同其它類型的請求。HTTP處理常式可以返回true或false來表明它們是否可以重複使用。
  
    你可以使用web.config或者machine.config檔案把這些類映射到http請求上。映射完成以後,當接收到相應請求的時候ASP.NET會執行個體化http處理常式。我們將解釋如何在web.config和/或machine.config檔案中定義所有這些細節資訊。
  
    ASP.NET還通過IHttpHandlerFactory介面支援http處理常式的擴充。ASP.NET提供了把http請求路由到實現IHttpHandlerFactory介面的類的對象上的能力。此外,ASP.NET還利用了Factory設計模式。這種模式為建立一組相關對象而不提供具體類的功能提供了介面。簡單的說,你可以把用於建立依賴傳遞進來的參數建立的http處理常式對象的類看作是factory(工廠)。我們不用指定需要執行個體化的特定的http處理常式;http處理常式工廠處理這種事務。這樣做的優點在於如果未來實現IHttpHandler介面的對象的實現方法發生了改變,只要介面仍然相同,用戶端就不會受到影響。
  
    下面是IHttpHandlerFactory介面中的方法列表:
  
  方法名稱 描述
  GetHandler 這個方法負責建立適當的處理常式並把它的指標返回到調用代碼(ASP.NET運行時)。這個方法返回的處理常式對象應該實現了IHttpHandler介面。
  ReleaseHandler 這個方法負責在請求處理完成後釋放http處理常式。Factory 實現決定了它的操作。Factory 實現可以是實際摧毀執行個體,也可以把它放入緩衝池供以後使用。
  
    在設定檔中註冊HTTP處理常式和HTTP處理常式工廠
  
    ASP.NET在下面的設定檔中維護自己的配置資訊:
  
    · machine.config
  
    · web.config
  
    machine.config檔案包含應用於電腦上安裝的所有Web應用程式的配置設定資訊。
  
    web.config檔案對於每個Web應用程式來說是特定的。每個Web應用程式都有自己的web.config檔案。Web應用程式的任何子目錄也可能包含自己的web.config檔案;這使得它們能夠覆蓋父目錄的設定資訊。
  為了給我們的Web應用程式添加HTTP處理常式,你可以使用<httpHandlers>和<add>節點。實際上,處理常式都帶有<add>節點,列舉在<httpHandlers>和</httpHandlers>節點之間。下面是添加HTTP處理常式的一個普通的例子:
  
  <httpHandlers>
   <add verb="supported http verbs" path="path" type="namespace.classname, assemblyname" />
  <httpHandlers>
  
    在上面的XML中,
  
    · Verb屬性指定了處理常式支援的HTTP動作。如果某個處理常式支援所有的HTTP動作,請使用“*”,否則使用逗號分隔的列表列出支援的動作。因此如果你的處理常式只支援HTTP GET和POST,那麼verb屬性就應該是“GET, POST”。
  
    · Path屬性指定了需要調用處理常式的路徑和檔案名稱(可以包含萬用字元)。例如,如果你希望自己的處理常式只有在test.xyz檔案被請求的時候才被調用,那麼path屬性就包含“test.xyz”,如果你希望含有.xyz尾碼的所有檔案都調用處理常式,path屬性應該包含“*.xyz”。
  
    · Type屬性用名字空間、類名稱和組件名稱的組合形式指定處理常式或處理常式工廠的實際類型。ASP.NET運行時首先搜尋應用程式的bin目錄中的組件DLL,接著在全域組件緩衝(GAC)中搜尋。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.