ASP.NET Generic Handler (ASHX File Extension)

2022-04-17

說明如何開發 ASHX 泛型處理常式,不需要在專案進行編譯就直接參與執行環境中作為 Http Handler 的替代選擇,不論是在問題處理的 Workaround 或 Trouble Shooting 工具,都能夠發揮作用 😁

logo

ASHX

使用 ASHX 泛型處理常式,可以解決需要獨立處理邏輯的使用情境,並且在不需要專案原始碼編譯的情況下,加入到運行中的環境,可以良善的作為 Workaround 或者是 Trouble Shooting 的工具,也可能是惡意的被作為 Back Door 的植入點。

使用 Visual Studio 可以建立 ASHX 泛型處理常式,也可以直接用 Visual Studio Code 來建立。

如果是使用 Visual Studio,加入泛型處理常式。

接著刪除一併新增的 fileName.ashx.cs,因為要藉由免編譯的方式,直接將 ASHX 加入程式碼,不需要透過 Code-Behind 的方式:

接著編輯 fileName.ashx。

<%@ WebHandler Language="C#" CodeBehind="Handler1.ashx.cs" Class="CodeShops.Handler1" %>

將原本 CodeBehind="Handler1.ashx.cs" 移除,如此一來 ashx 不需要 Compilation 就可以使用,移除結果:

<%@ WebHandler Language="C#" Class="CodeShops.Handler1" %>

接著在加入 Handler Code:

<%@ WebHandler Language="C#" Class="CodeShops.ServerInfoHandler" %>

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace CodeShops
{
    public class ServerInfoHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            context.Response.Write(System.Web.Helpers.ServerInfo.GetHtml());
        }

        public bool IsReusable
        {
            get { return false; }
        }
    }
}

只要呼應 ashx 所在的網站相對路徑,就可以存取 ServerInfo,Trouble Shooting 的時候實用 😎

相關連結

ASP.NET MVC 從無到有打造一個應用系統

Visual Studio 入門教學