本主題闡釋一個 HTTP 處理程序的代碼,該處理程序對 ASP.NET 應用程序中其 URL 以 .sample 結尾的資源執行同步請求處理。此代碼示例闡釋了下列內容:
一個 HTTP 處理程序類的代碼。該類必須實現 ProcessRequest 方法和 IsReusable 屬性。
Web.config 文件中注冊該處理程序并將 .sample 文件擴展名映射到該處理程序所需的元素。
如何在 Internet 信息服務 (IIS) 中將 .sample 文件擴展名映射到 ASP.NET。
注意
在將配置文件更改為包含對新處理程序的引用后,ASP.NET Development Server 將處理對新資源的請求。若要啟用 IIS 以處理該請求,請參見下面的過程。
當用戶請求一個其 URL 以 .sample 結尾的資源時,Web 服務器將該請求轉發給 ASP.NET。然后 ASP.NET 調用 HTTP 處理程序,后者返回一個響應。該響應由該處理程序動態創建;不需要存在具有文件擴展名 .sample 的文件。有關 ASP.NET 如何與 Web 服務器交互的更多信息,請參見 ASP.NET 生命周期。
創建自定義 HelloWorldHandler HTTP 處理程序類
在網站的 App_Code 目錄中,創建一個名為 HelloWorldHandler 的類。
向類文件中添加下面的代碼。
Visual Basic
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
C#
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 屬性中。
注冊自定義 HTTP 處理程序
創建完自定義 HTTP 處理程序類后,必須在應用程序的 Web.config 文件中注冊它。這樣,ASP.NET 在接收對其 URL 以 .sample 結尾的資源進行的請求時,可以找到該處理程序。
在 Web.config 文件中注冊自定義 HTTP 處理程序
將一個 Web.config 文件添加到網站(如果該文件尚未存在)。
將下面突出顯示的元素添加到 Web.config 文件中。
<configuration>
<system.web>
<httpHandlers> <add verb="*" path="*.sample" type="HelloWorldHandler"/> </httpHandlers>
</system.web>
</configuration>
這段代碼按類名注冊自定義處理程序,并將 .sample 文件擴展名映射到該處理程序。
在 IIS 6.0 中配置 HTTP 處理程序擴展名
IIS 只將針對某些文件類型的請求傳遞給 ASP.NET 進行處理。默認情況下,具有 .aspx、.ascx、.asmx 等文件擴展名的文件在 IIS 6.0 中已映射為 ASP.NET ISAPI 擴展名 (Aspnet_isapi.dll)。但如果希望 ASP.NET 處理自定義 URL 擴展名,則必須在 IIS 中映射這些擴展名。有關更多信息,請參見 ASP.NET 生命周期。
在 IIS 6.0 中將 .sample 文件擴展名映射到 ASP.NET
打開“Internet 信息服務(IIS)管理器”。
右擊應用程序的名稱,然后單擊“屬性”。
注意
有關創建 ASP.NET 應用程序的說明,請參見如何:在 IIS 中創建并配置本地 ASP.NET 網站。
單擊“虛擬目錄”選項卡,然后單擊“配置”。
在“映射”選項卡上,單擊“添加”。
將顯示“添加/編輯應用程序擴展名映射”對話框。
在“可執行文件”框中,鍵入或瀏覽至 Aspnet_isapi.dll 文件。默認情況下,該文件位于以下位置。
%windows%\Microsoft.NET\Framework\version\
注意
可以從其他映射(如 .aspx 文件的映射)獲得完整路徑和文件名。
在“擴展名”框中,鍵入 .sample。
清除“確認文件是否存在”復選框。
單擊“確定”,然后關閉 IIS 管理器。
測試自定義 HTTP 處理程序
創建并注冊了自定義 HTTP 處理程序后,可以通過請求具有 .sample 文件擴展名的資源對其進行測試。
測試自定義 HTTP 處理程序
在瀏覽器中,輸入一個指向 Web 應用程序并以 .sample 結尾的 URL,如下所示:
http://localhost/SampleApplication/test.sample
將顯示在 HelloWorldHandler 類中定義的文本