首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 將 HttpHandler (ashx) 移至類別庫並註冊使用

     編輯:ASP.NET 基礎

將通用處理邏輯(如圖片產生、檔案下載、API 端點)封裝於類別庫的 IHttpHandler 實作中,可跨專案重用並保持主專案乾淨。本文示範建立 Handler 類別、編譯為 DLL、於主站 web.config 註冊的完整流程。

1. 類別庫專案建立 Handler

// EdiBlog.Core.Web.HttpHandlers.ExampleHandler.cs
namespace EdiBlog.Core.Web.HttpHandlers
{
    using System;
    using System.Web;

    public class ExampleHandler : IHttpHandler
    {
        public bool IsReusable => false; // 若無狀態可設 true 提升效能

        public void ProcessRequest(HttpContext context)
        {
            // 您的邏輯:產生圖驗證碼、輸出動態圖片、處理 AJAX 請求等
            context.Response.ContentType = "text/plain";
            context.Response.Write("Hello from Class Library Handler!");
        }
    }
}
  • 實作 IHttpHandler 介面,必須實作 IsReusable 與 ProcessRequest。
  • 命名空間與類別名稱需記住,註冊時會用到。

2. 編譯並參考

  • 建置類別庫產生 EdiBlog.Core.dll。
  • 主 Web 專案加入對此 DLL 的參考。

3. web.config 註冊 (IIS 7+ 整合模式)

<configuration>
  <system.webServer>
    <handlers>
      <add name="ExampleHandler" 
           verb="*" 
           path="ex.axd" 
           type="EdiBlog.Core.Web.HttpHandlers.ExampleHandler, EdiBlog.Core" />
    </handlers>
  </system.webServer>
</configuration>
屬性說明
name唯一識別名稱
verbHTTP 動詞,* 表全部
path對應 URL 路徑,副檔名需 IIS 支援(如 .axd、.ashx、.json)
type完整類別名稱, 組件名稱(不含副檔名)

4. IIS 經典模式 / IIS 6 註冊

<system.web>
  <httpHandlers>
    <add verb="*" path="ex.axd" type="EdiBlog.Core.Web.HttpHandlers.ExampleHandler, EdiBlog.Core" />
  </httpHandlers>
</system.web>

5. 虛擬主機無法管理 IIS 時的注意

  • 使用 IIS 預設已對應的副檔名(.axd、.ashx、.soap 等),避免需額外設定 MIME 對應。
  • 若主機商支援 web.config 覆寫,上述設定即可生效。

6. 進階:泛型 Handler 基底類別

public abstract class BaseHandler : IHttpHandler
{
    public bool IsReusable => false;
    public void ProcessRequest(HttpContext context)
    {
        // 共用前置處理:記錄、驗證、設定回應標頭
        HandleRequest(context);
    }
    protected abstract void HandleRequest(HttpContext context);
}

具體 Handler 繼承 BaseHandler 實作 HandleRequest,集中管理共用邏輯。

優點總結

  • 邏輯封裝於 DLL,多專案共用、易於版本控制與 NuGet 發佈。
  • 主專案不包含 .ashx 檔案,結構更清晰。
  • 單元測試可直接實例化 Handler 呼叫 ProcessRequest(傳入 Mock HttpContext)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved