在早期 ASP.NET Web Forms 開發中,為了提升網站效能與 SEO 表現,常見的做法是將動態頁面預先生成靜態 HTML 檔案。本文提供一套完整的 C# 實作範例,包含模板讀取、標籤替換、檔案輸出與目錄管理等核心功能,適合需要靜態化輸出的專案參考。
整個方案由兩個主要類別組成:
public string chg_Html(string template_url, string Come_url, string encode, string[] tags, string[] chg_tags)
參數說明:
template_url:模板檔案相對路徑Come_url:輸出目錄相對路徑encode:編碼格式(如 gb2312、utf-8)tags:模板中待替換的標籤陣列(如 $title$, $content$)chg_tags:對應的替換內容陣列使用 StreamReader 指定編碼讀取模板完整內容,採用 try-catch-finally 確保資源釋放。
結合時間戳 yyyyMMddHHmmss 與隨機數,避免高併發下檔名衝突:
long tick = DateTime.Now.Ticks;
Random ra = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
string rnd = ra.Next(1, 999).ToString();
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "-" + rnd + ".htm";
遍歷標籤陣列,對模板字串執行 Replace 操作,支援多標籤一次性替換。
使用 StreamWriter 將處理後的 HTML 字串寫入實體檔案,回傳布林值表示成敗。
封裝常用檔案系統操作:
CreateFolder:建立目錄(含多層)DeleteChildFolder:刪除子目錄與檔案DeleteFile:刪除單一檔案CreateFile:建立檔案(含自動建立目錄)DeleParentFolder:刪除整個目錄樹ReWriteReadinnerText:附加內容至檔案ReaderFileData:讀取檔案完整內容checkValidSessionPath:取得目錄資訊物件protected void Button1_Click(object sender, EventArgs e)
{
string[] a = new string[] { "$title$", "$content$" };
string[] b = new string[] { txtTitle.Text, txtContent.Text };
toHtml myhtml = new toHtml();
string htmpath = myhtml.chg_Html("template/template.htm", "htm", "gb2312", a, b);
Response.Write(htmpath);
}
<html>
<head><title>$title$</title></head>
<body>
<h1>$title$</h1>
<div>$content$</div>
</body>
</html>
Path.Combine 替代字串串接,提升跨平台相容性。StreamReader/Writer 非同步版本,避免阻塞請求執行緒。本方案展示了經典 ASP.NET 靜態頁生成的完整流程,雖然現代開發傾向於前後端分離或 SSG(靜態站點生成),但在維護舊系統或特定靜態化需求時,此架構仍具參考價值。核心在於「模板+資料」分離與檔案系統操作的健壯封裝。