ASP.NET 提供多層次配置讀取機制:Web.config 中的 `
<!-- Web.config -->
<appSettings>
<add key="SiteName" value="My Site" />
<add key="MaxUploadMB" value="100" />
<add key="EnableFeatureX" value="true" />
</appSettings>
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]}");
}
// 命名空間:System.Configuration
string siteName = ConfigurationSettings.AppSettings["SiteName"];
// 編譯警告:'ConfigurationSettings.AppSettings' is obsolete
// 建議全面遷移至 ConfigurationManager
<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;
將相關設定群組為強型別物件,避免散落在 AppSettings 中。
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"];
}
<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>
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; // 強型別存取
}
原文列出的 `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` 瀏覽器定義 (已嚴重過時)。
| ASP.NET Framework | ASP.NET Core |
|---|---|
| Web.config / AppSettings | appsettings.json + IConfiguration |
| ConfigurationManager.AppSettings[key] | Configuration[key] 或 Configuration.GetSection("SectionName").Get<T>() |
| ConfigurationSection 強型別 | Options Pattern: `services.Configure |
| ConnectionStrings 區段 | appsettings.json 中的 ConnectionStrings 區塊 |
配置管理是應用程式可維護性的基石,投入時間建立良好架構將節省未來無數除錯工時。