ASP.NET Generic Handler (ASHX File Extension)
2022-04-17
說明如何開發 ASHX 泛型處理常式,不需要在專案進行編譯就直接參與執行環境中作為 Http Handler 的替代選擇,不論是在問題處理的 Workaround 或 Trouble Shooting 工具,都能夠發揮作用 😁
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 的時候實用 😎