.ashx 常被視為「圖片處理專用」,實則是輕量級 HTTP 端點的萬能鑰匙。本文彙整五大實戰模式,並釐清常見誤區與最佳實踐。
實作 IHttpHandler,依查詢字串參數 (PhotoID/AlbumID、Size) 從資料庫/檔案系統讀取圖片流,設定 ContentType 並寫入 Response.OutputStream。前端直接用 <img src="Handler.ashx?id=123" /> 引用。
context.Response.ContentType = "text/plain";
context.Response.Write("alert('hi');"); // 或 document.write(...)
前端以 <script src="Handler.ashx"></script> 引入,實現動態 JS 生成(如根據用戶權限輸出不同配置)。
<link href="css/Handler.ashx" rel="stylesheet" type="text/css" />
Handler 設定 ContentType = "text/css" 並輸出動態樣式規則,支援主題切換、租戶隔離等場景。
orderDoc.load("Handler.ashx"); // MSXML / XmlDocument 載入
適合舊系統整合、RSS/Atom Feed、Sitemap 動態生成。
context.Response.Write("document.write('Hello World');");
前端 <script src="TestHandler.ashx"></script> 直接在頁面寫入內容,早期廣告輪播、第三方嵌入常用。
預設 Handler 無 Session,需顯式實作介面:
IReadOnlySessionStateIRequiresSessionStatepublic class DownloadHandler : IHttpHandler, IReadOnlySessionState {
public void ProcessRequest(HttpContext ctx) {
ctx.Response.Write(ctx.Session["fred"]);
}
}
.ashx 宜限於「極簡、無框架依賴、舊系統相容」場景。Response.Cache.SetCacheability(HttpCacheability.Public) 並設定 ETag/Last-Modified,減輕伺服器壓力。404 而非空內容,利於前端錯誤攔截與 CDN 快取判斷。研究 Rewirte.dll (URL Rewrite) 如何將 .ashx 映射為偽靜態路由,進一步理解 HTTP 管線的攔截與分發機制。