逐步解說:建立同步的 HTTP 處理常式
更新:2007 年 11 月
本逐步解說描述如何建立 HTTP 處理常式,執行要求的同步處理。範例處理常式會處理 ASP.NET 應用程式中的資源要求,此應用程式的 URL 結尾為 .sample。
當使用者要求以 .sample 結束之 URL 的資源時,Web 伺服器會將該要求轉寄至 ASP.NET。然後,ASP.NET 會呼叫傳回回應的 HTTP 處理常式。處理常式會動態建立回應。不需要存在副檔名為 .sample 的檔案。
如需 ASP.NET 執行階段如何與 IIS 6.0 互動的詳細資訊,請參閱 IIS 5.0 和 6.0 的 ASP.NET 應用程式生命週期概觀。如需 ASP.NET 與 IIS 7.0 整合的詳細資訊,請參閱 IIS 7.0 的 ASP.NET 應用程式生命週期概觀。
本逐步解說所說明的工作包括下列各項:
如何建立 HTTP 處理常式類別的程式碼。該類別必須實作 ProcessRequest 方法和 IsReusable 屬性。
如何在 Web.config 檔案中註冊處理常式,並將 .sample 副檔名對應至此處理常式。
如何將副檔名 .sample 對應至網際網路資訊服務 (IIS) 中的 ASP.NET。
注意事項: 在組態檔變更為包含新處理常式的參考之後,ASP.NET 程式開發伺服器將會服務對資源的要求。如需 ASP.NET 程式開發伺服器的詳細資訊,請參閱 Visual Web Developer 中的 Web 伺服器。若要啟用 IIS 以服務要求,請參閱本逐步解說中稍後的程序。
必要條件
若要完成這個逐步解說,您必須要有:
Visual Studio 或 Visual Web Developer。
可以使用 IIS 來執行的 ASP.NET 網站。
IIS 6.0 或 IIS 7.0。
建立同步的 HTTP 處理常式類別
若要建立自訂 HelloWorldHandler HTTP 處理常式類別
如果您所使用的網站還沒有 App_Code 資料夾,請在網站的根目錄下建立這個資料夾。
在 App_Code 目錄中,建立名為 HelloWorldHandler 的類別,然後將下列程式碼加入至該類別檔。
Imports System.Web Public Class HelloWorldHandler Implements IHttpHandler Public Sub ProcessRequest(ByVal context As _ System.Web.HttpContext) Implements _ System.Web.IHttpHandler.ProcessRequest Dim request As HttpRequest = context.Request Dim response As HttpResponse = context.Response ' This handler is called whenever a file ending ' in .sample is requested. A file with that extension ' does not need to exist. response.Write("<html>") response.Write("<body>") response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>") response.Write("</body>") response.Write("</html>") End Sub Public ReadOnly Property IsReusable() As Boolean _ Implements System.Web.IHttpHandler.IsReusable Get Return False End Get End Property End Class
using System.Web; public class HelloWorldHandler : IHttpHandler { public HelloWorldHandler() { } public void ProcessRequest(HttpContext context) { HttpRequest Request = context.Request; HttpResponse Response = context.Response; // This handler is called whenever a file ending // in .sample is requested. A file with that extension // does not need to exist. Response.Write("<html>"); Response.Write("<body>"); Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>"); Response.Write("</body>"); Response.Write("</html>"); } public bool IsReusable { // To enable pooling, return true here. // This keeps the handler in memory. get { return false; } } }
程式碼會實作 ProcessRequest 方法,並將字串寫出至目前 HttpContext 物件的 Response 屬性。
在 IIS 6.0 中註冊自訂 HTTP 處理常式
在建立自訂 HTTP 處理常式類別之後,您必須在應用程式的 Web.config 檔中註冊之。這麼做可讓 ASP.NET 在接收到對資源的要求 (此資源的 URL 結尾是 .sample) 時尋找處理常式。
視您所使用的是 IIS 6.0 或 IIS 7.0,註冊處理常式的程序有所不同。本節說明如何在 IIS 6.0 中註冊處理常式。下一節描述如何在 IIS 7.0 中註冊處理常式。
若要在 IIS 6.0 中註冊處理常式
如果網站還沒有 Web.config 檔案,請在網站的根目錄下建立一個。
將下列反白顯示的項目加入至 Web.config 檔。
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.sample" type="HelloWorldHandler"/> </httpHandlers> </system.web> </configuration>
組態項目會依類別名稱註冊自訂處理常式,並將 .sample 副檔名對應到該處理常式。
使用 IIS 管理員,為 .sample 副檔名註冊應用程式副檔名對應。如需詳細資訊,請參閱 HOW TO:在 IIS 中設定 HTTP 處理常式副檔名。
在 IIS 7.0 中註冊自訂 HTTP 處理常式
在 IIS 7.0 中,應用程式能夠以傳統 (Classic) 或整合 (Integrated) 模式執行。在傳統模式下,處理要求的方式和在 IIS 6.0 中差不多。在整合模式下,IIS 7.0 會使用允許和 ASP.NET 共用要求、模組和其他功能的管線來管理要求。
在 IIS 7.0 中,若要註冊處理常式,則必須在 Web.config 檔案或 IIS 管理員中註冊。因為 IIS 7.0 中的集中化管理工作,所以在應用程式的 Web.config 檔案中的變更,都會反映在應用程式的 IIS 管理員介面中,反之亦然。在下列程序中,處理常式會註冊在 Web.config 檔案中。
在傳統模式和整合模式中執行之 IIS 7.0 的處理常式,其註冊程序不同。請遵循您所使用的 IIS 模式之程序。
若要在以傳統模式執行的 IIS 7.0 中註冊處理常式
如果網站還沒有 Web.config 檔案,請在網站的根目錄下建立一個。
將下列反白顯示的項目加入至 Web.config 檔。
注意事項: 替代 aspnet_isapi.dll 檔案的正確路徑。.dll 檔案位於安裝 .NET Framework 的資料夾中。預設為 C:\WINDOWS\Microsoft.NET\Framework\version。
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.sample" type="HelloWorldHandler"/> </httpHandlers> </system.web> <system.webServer> <handlers> <add verb="*" path="*.sample" name="HelloWorldHandler" type="HelloWorldHandler" modules="IsapiModule"/> scriptProcessor="%path%\aspnet_isapi.dll" </handlers> </system.webServer> </configuration>
組態項目會依類別名稱註冊自訂處理常式,並將 .sample 副檔名對應到該處理常式。
注意事項: 因為您正在註冊的是自訂副檔名,所以 handlers 區段和 httpHandlers 區段中都要註冊處理常式。在傳統模式下,基於回溯相容性的考量,會使用 modules 屬性 (Attribute) 將處理常式會指定為 ISAPI 模組。ASP.NET ISAPI dll 的路徑是使用 scriptProcessor 屬性 (Attribute) 所指定。handlers 區段中需要 name 屬性 (Attribute)。
若要在以整合模式執行的 IIS 7.0 中註冊處理常式
如果網站還沒有 Web.config 檔案,請在網站的根目錄下建立一個。
將下列反白顯示的項目加入至 Web.config 檔。
<configuration> <system.webServer> <handlers> <add verb="*" path="*.sample" name="HelloWorldHandler" type="HelloWorldHandler"/> </handlers> </system.webServer> </configuration>
組態項目會依類別名稱註冊自訂處理常式,並將 .sample 副檔名對應到該處理常式。
注意事項: 註冊會在 handlers 區段中完成,但不在 httpHandlers 區段中。name 屬性 (Attribute) 是必要項。
測試自訂 HTTP 處理常式
一旦建立並註冊自訂 HTTP 處理常式之後,您就可以進行測試。
測試自訂 HTTP 處理常式
瀏覽至應用程式,並在瀏覽器中輸入以 .sample 結尾的 URL 如下:
https://localhost/SampleApplication/test.sample
在 HelloWorldHandler 類別中定義的文字隨即顯示。
請參閱
工作
概念
IIS 5.0 和 6.0 的 ASP.NET 應用程式生命週期概觀