2011-06-23 167 views
115

有人可以用不到兩句話解釋兩者之間的區別嗎?是的,我知道,谷歌能提供數百​​個答案,但沒有一個在2個語句清楚:)HTTP處理程序vs HTTP模塊

+0

在什麼情況下? – Flimzy

+0

在每個請求前尋找運行一些代碼的上下文。 – frenchie

+18

+1是「我知道我可以谷歌它」。 – Csharp

回答

254

HttpHandler的是在請求火車前往。 HttpModule是一個站點。

+4

這應該是被接受的答案。 –

+39

偉大的內聯爆炸..你是編程的莎士比亞。 – Pranav

+0

精彩的解釋! :) –

181

的兩句話:

一個HttpModule將執行的每個請求您的應用程序,無論擴展的,並且通常使用例如安全性,統計,日誌記錄等。

HttpHandler通常與特定的擴展名關聯,並用於諸如RSS提要,動態圖像生成或修改等。

如果這不是完全清楚多一點解釋:

我想他們的方式 - 模塊「插入」到請求管道,而處理程序「處理」一個特定的文件擴展名。因此,如果您有一個帶有LoggingModule和PdfHandler的站點,則兩者都將執行請求http://example.com/sample.pdf,並且只有日誌模塊纔會執行請求http://example.com/page.aspx

有MSDN上的差異很明顯文章:HTTP Handlers and HTTP Modules Overview

+0

好的,所以如果我想運行一些運行在.aspx文件的每個請求上的代碼,我實現了一個處理程序,如果我想在每個請求上運行一些代碼而不管請求的文件類型如何,我實現一個模塊。是嗎? – frenchie

+4

@frenchie - 不,aspx頁面是建立在HttpHandlers的基礎之上的,爲您提供頁面生命週期。把它看作一個aspx頁面,切入非常基本的事件。 'ProcessRequest'。另一方面,該模塊將在您連接到的生命週期的任何時刻執行。對於希望在aspx頁面之前運行某些內容的場景,您需要一個模塊。然而,你需要手動過濾掉請求頁面不是.aspx – Phill

+5

我是否正確的說,每個請求可以只有一個處理程序和多個模塊? –

15

HTTP處理程序是響應對ASP.NET Web應用程序的請求而運行的進程。 通過HTTP模塊,您可以檢查傳入和傳出的請求,並根據請求採取措施。

+1

從這個意義上說,aspx可以被認爲是一種類型的httphandler? – frenchie

+14

是Frenchie ..打開任何aspx後面的代碼。你會看到: public partial class good:System.Web.UI.Page 現在右鍵單擊頁面並單擊轉到定義,你會看到: public class Page:TemplateControl,IHttpHandler –

1

HTTP處理程序是實際編譯基於設置完成的地方。比如頁面擴展名是.aspx,那麼它會通過system.web.Ui.Pagahandlefactory進行編譯。一旦編譯完成,HTTP處理請求將通過HTTP模塊和IIS進行。

2

好文章aboute它HttpModule-and-HttpHandlers

參考:INFO:ASP.NET HTTP模塊和HTTP處理程序概述

「模塊被稱爲處理程序執行之前和之後。模塊使開發人員能夠截獲,參與或修改每個單獨的請求。處理程序用於處理各個端點請求。處理程序使ASP.NET Framework能夠在應用程序中處理單個HTTP URL或URL擴展組。與模塊不同,只有一個處理程序用於處理請求「。

+0

謝謝,它可以幫助我很多 –

1

HttpHandler負責處理http請求,而HttpModule響應應用程序生命週期事件。

13

HttpHandler和HttpModule的主要和共同目標是在ASP.NET請求到達IIS服務器之前注入預處理邏輯。

ASP.NET提供了兩種在請求管道中注入邏輯的方法;

  1. HTTP處理程序: HTTP處理程序幫助我們根據請求的文件名的擴展注入預處理邏輯。 ASP.NET使用HTTP處理程序來實現許多自己的功能。例如,ASP.NET使用處理程序處理.aspx,.asmx和trace.axd文件。

示例: RSS提要:要爲網站創建RSS提要,您可以創建一個發佈RSS格式XML的處理程序。因此,當用戶向您的站點發送以.rss結尾的請求時,ASP.NET會調用您的處理程序來處理請求。

創建處理程序涉及三個步驟 1.實現IHttpHandler接口。 2.在web.config或machine.config文件中註冊處理程序。 3.將文件擴展名(* .arshad)映射到IIS中的aspnet_isapi.dll。

IHttpHandler接口具有需要實現的ProcessRequest方法和IsReusable屬性。 ProcessRequest:在此方法中,您編寫爲處理程序生成輸出的代碼。 IsResuable:這個屬性告訴這個句柄是否可以被重用。

你可以這樣

<httpHandlers> 
    <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" /> 
</httpHandlers> 

注登記web.config文件處理程序:在這裏我們處理與擴展艾爾沙德任何文件名。

  1. Http模塊: HttpModule是基於事件的處理器,用於在請求到達IIS服務器之前注入預處理邏輯。 ASP.NET使用HTTP模塊實現許多自己的功能,如身份驗證和授權,會話管理和輸出緩存等。

ASP.NET引擎在請求傳遞通過請求管道時發出大量事件。 其中一些事件是AuthenticateRequest,AuthorizeRequest,BeginRequest,EndRequest。 通過使用HttpModule,您可以在這些事件中編寫邏輯。這些邏輯在事件觸發和請求到達IIS之前得到執行。

有參與創建模塊兩步, 1.在web.config中或machine.config文件實現IHttpModule的接口 2.註冊模塊

例如: 安全:使用HTTP模塊,您可以執行自定義在請求到達IIS之前進行身份驗證或其他安全檢查。