ASP.NET 採用分層配置系統,透過多層 Web.config 實現從機器層級到應用程式子目錄的精細化設定控制。理解繼承、覆寫與鎖定機制,是掌握 ASP.NET 部署與維運的關鍵。
| 層級 | 檔案 | 說明 |
|---|---|---|
| 伺服器 | Machine.config | 所有 .NET 應用程式的基礎設定,位於 \Microsoft.NET\Framework\版本\CONFIG\ |
| 根 Web | Web.config | 與 Machine.config 同目錄,繼承機器設定,定義所有 ASP.NET 應用程式的預設值 |
| 網站 | Web.config | 特定網站設定,向下繼承至該站點所有應用程式與子目錄 |
| 應用程式根目錄 | Web.config | 個別 ASP.NET 應用程式設定,繼承上層並可覆寫,影響所有子目錄 |
| 應用程式子目錄 | Web.config | 針對特定子目錄的設定,繼承應用程式根目錄設定 |
子層級自動繼承父層級設定,可透過在子 Web.config 重新定義同名區段實現覆寫。集合類型元素(如 <customErrors>、<namespaces>)支援 <add>、<remove>、<clear> 子元素精確控制合併行為。
父層級可使用 allowOverride="false" 或 <location allowOverride="false"> 防止關鍵設定(如驗證模式、信任層級)被子層級意外修改,確保安全基線。
configSections 中的 allowDefinition 屬性限制區段可出現的層級:
MachineOnly:僅 Machine.configMachineToApplication:機器到應用程式根目錄(如 <authentication>)Everywhere:所有層級(預設)當 SubDir1 目錄收到不存在檔案的請求,ASP.NET 從最本地的 Web.config 向上搜尋 <customErrors> 區段中 statusCode="404" 的 <error> 元素,找到後回傳其 redirect URL。這展示了配置搜尋的「由近及遠、首符合優先」原則。
Web.config 僅保留覆寫設定,避免重複繼承內容。<location> 元素針對特定路徑套用設定,減少子目錄配置檔數量。