首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET ConfigurationSettings 讀取 AppSettings 與自訂配置區段

     編輯:關於ASP.NET

ASP.NET 提供多層次配置讀取機制:Web.config 中的 ``、``、自訂 `

`,以及機器層級 `` 等。理解 `ConfigurationSettings` (舊 API) 與 `ConfigurationManager` (新 API) 的用法差異,對維護舊專案與開發新專案都至關重要。

1. 讀取 AppSettings (最常用)


<!-- Web.config -->
<appSettings>
    <add key="SiteName" value="My Site" />
    <add key="MaxUploadMB" value="100" />
    <add key="EnableFeatureX" value="true" />
</appSettings>

新專案:ConfigurationManager (System.Configuration.dll)


using System.Configuration;

string siteName = ConfigurationManager.AppSettings["SiteName"]; // "My Site"
int maxUpload = int.Parse(ConfigurationManager.AppSettings["MaxUploadMB"] ?? "10");
bool enableX = bool.Parse(ConfigurationManager.AppSettings["EnableFeatureX"] ?? "false");

// 取得所有鍵值
foreach (string key in ConfigurationManager.AppSettings)
{
    Console.WriteLine($"{key} = {ConfigurationManager.AppSettings[key]}");
}

舊專案 (ASP.NET 1.x/2.0):ConfigurationSettings (已過時)


// 命名空間:System.Configuration
string siteName = ConfigurationSettings.AppSettings["SiteName"]; 
// 編譯警告:'ConfigurationSettings.AppSettings' is obsolete
// 建議全面遷移至 ConfigurationManager

2. 讀取 ConnectionStrings


<connectionStrings>
    <add name="MainDB" connectionString="Server=.;Database=DB;User=sa;Pwd=***" providerName="System.Data.SqlClient" />
</connectionStrings>

var connStr = ConfigurationManager.ConnectionStrings["MainDB"].ConnectionString;
var provider = ConfigurationManager.ConnectionStrings["MainDB"].ProviderName;

3. 自訂配置區段

將相關設定群組為強型別物件,避免散落在 AppSettings 中。

步驟 1:定義配置類別


using System.Configuration;

public class EmailSettings : ConfigurationSection
{
    [ConfigurationProperty("smtpServer", IsRequired = true)]
    public string SmtpServer => (string)this["smtpServer"];

    [ConfigurationProperty("port", DefaultValue = 25)]
    public int Port => (int)this["port"];

    [ConfigurationProperty("enableSsl", DefaultValue = false)]
    public bool EnableSsl => (bool)this["enableSsl"];

    [ConfigurationProperty("credentials")]
    public CredentialsElement Credentials => (CredentialsElement)this["credentials"];
}

public class CredentialsElement : ConfigurationElement
{
    [ConfigurationProperty("userName", IsRequired = true)]
    public string UserName => (string)this["userName"];

    [ConfigurationProperty("password", IsRequired = true)]
    public string Password => (string)this["password"];
}

步驟 2:Web.config 宣告區段與內容


<configSections>
    <section name="emailSettings" type="MyApp.Config.EmailSettings, MyApp" />
</configSections>

<emailSettings smtpServer="smtp.gmail.com" port="587" enableSsl="true">
    <credentials userName="noreply@mysite.com" password="***" />
</emailSettings>

步驟 3:程式碼讀取


var emailConfig = (EmailSettings)ConfigurationManager.GetSection("emailSettings");
if (emailConfig != null)
{
    string server = emailConfig.SmtpServer; // "smtp.gmail.com"
    int port = emailConfig.Port; // 587
    var cred = emailConfig.Credentials; // 強型別存取
}

4. 瀏覽器能力 (Browser Capabilities) - 僅供參考

原文列出的 `Request.Browser` 屬性 (ActiveXControls, AOL, BackgroundSounds, Beta, Browser, CDF, Cookies, Crawler, Frames, JavaApplets, JavaScript, MajorVersion, MinorVersion, Platform, Tables, Type, Version, VBScript, Win16, Win32) 來自 `HttpBrowserCapabilities` 類別,現代專案建議使用 51Degrees、WURFL 或 User-Agent 解析庫,而非依賴機器內建的 `machine.config` 瀏覽器定義 (已嚴重過時)。

5. ASP.NET Core 對應

ASP.NET FrameworkASP.NET Core
Web.config / AppSettingsappsettings.json + IConfiguration
ConfigurationManager.AppSettings[key]Configuration[key] 或 Configuration.GetSection("SectionName").Get<T>()
ConfigurationSection 強型別Options Pattern: `services.Configure(Configuration.GetSection("emailSettings"))` → `IOptions`
ConnectionStrings 區段appsettings.json 中的 ConnectionStrings 區塊

最佳實務摘要

  • **新專案全面使用 `ConfigurationManager`** (Framework) 或 `IConfiguration` (Core),棄用 `ConfigurationSettings`。
  • **連接字串放 ``**,享受加密 (`aspnet_regiis -pef connectionStrings`) 與提供者名稱管理。
  • **複雜設定群組用自訂 ConfigurationSection / Options Pattern**,強型別、IntelliSense、驗證屬性完整支援。
  • **敏感資料 (密碼、金鑰) 勿寫入配置檔**,改用 Azure Key Vault、AWS Secrets Manager、環境變數、User Secrets (開發環境)。
  • **配置變更自動重載**:Framework 預設監聽 Web.config 變更;Core 預設監聽 appsettings.json 變更 (可配置 `reloadOnChange: true`)。

配置管理是應用程式可維護性的基石,投入時間建立良好架構將節省未來無數除錯工時。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved