部署時不想公開原始碼,且開發/測試/生產環境設定 (連線字串、服務端點等) 不同。web.config 為 XML 純文字檔,不編譯進 DLL,部署後可直接用記事本修改即時生效,極大簡化維運。
ASP.NET 讀取設定時,依下列順序搜尋,先找到者生效:
此機制支援「設定繼承與覆寫」:根目錄定義通用設定,子目錄僅覆寫差異部分。
| 區段群組 | 常見區段 | 用途 |
|---|---|---|
| system.web | compilation, authentication, authorization, customErrors, httpHandlers, httpModules, sessionState, pages | ASP.NET 執行階段核心行為 |
| system.webServer | handlers, modules, rewriting, security, staticContent | IIS 7+ 整合管線設定 |
| connectionStrings | add (name, connectionString, providerName) | 資料庫連線字串集中管理 |
| appSettings | add (key, value) | 應用程式自訂鍵值對 |
| applicationSettings / userSettings | 設定檔強型別存取 (Settings 類別) | 型別安全的設定存取 |
string val = ConfigurationManager.AppSettings["MyKey"];
string connStr = ConfigurationManager.ConnectionStrings["MyDb"].ConnectionString;
var config = WebConfigurationManager.OpenWebConfiguration("~");
config.AppSettings.Settings["MyKey"].Value = "NewValue";
config.Save(); // 觸發應用程式重啟
// 命令列工具
aspnet_regiis -pef "connectionStrings" "網站實體路徑" -prov "DataProtectionConfigurationProvider"
// 程式碼加密
var section = config.GetSection("connectionStrings");
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
}
理解 web.config 的層級架構、搜尋順序與區段用途,能靈活管理應用程式設定,實現開發與部署分離、敏感資料保護與環境差異隔離。