ASP.NET 三層架構開發中,初學者常遇到「未將對象引用設置到對象的實例」即 NullReferenceException。配置文件 Web.config 明明寫了,為什麼還是報空?
「大小寫搞錯了,還多了一個空格。」
<!-- Web.config -->
<connectionStrings>
<add name="MyConnStr" connectionString="..." /> <!-- 實際名稱 -->
</connectionStrings>
// 代碼中
string connStr = ConfigurationManager.ConnectionStrings["myconnstr"].ConnectionString;
// 錯誤:大小寫不一致 → 返回 null → 後續 new SqlConnection(null) 拋出異常
<add name="MyConnStr " connectionString="..." /> <!-- 結尾有空格 -->
// 代碼
var str = ConfigurationManager.ConnectionStrings["MyConnStr"].ConnectionString;
// 鍵名不匹配(含空格 vs 不含) → null
<appSettings>
<add key="ApiUrl" value="..." /> <!-- 正確 -->
</appSettings>
// 代碼
string url = ConfigurationManager.AppSettings["ApiURl"]; // 'L' 大小寫錯 → null
Web.config 複製鍵名到代碼,避免手打錯誤ConfigurationManager.AppSettings[key]?.Trim()var connStr = ConfigurationManager.ConnectionStrings["MyConnStr"];
if (connStr == null) throw new ConfigurationErrorsException("連接字串 'MyConnStr' 未找到,請檢查 Web.config");
string conn = connStr.ConnectionString;
Web.config 後需**重啟應用程式池**或**重新啟動網站**才會重新載入Web.config 而非本地開發版本// 定義強型別配置類
public class AppSettings
{
public string ApiUrl { get; set; }
public int CacheMinutes { get; set; }
public string ConnStr { get; set; }
}
// 啟動時綁定(ASP.NET Core 風格,Framework 可用 ConfigurationBinder)
var settings = new AppSettings();
ConfigurationManager.GetSection("appSettings").Bind(settings); // 需引用 NuGet: Microsoft.Extensions.Configuration.Binder
// 使用
string url = settings.ApiUrl; // 編譯時檢查,杜絕拼寫錯誤
90% 的「配置正確但讀取為空」問題,本質上都是**字串匹配失敗**:大小寫、空格、拼寫、節點名稱。養成「複製貼上鍵名 + 判空防護 + 強型別綁定」習慣,即可徹底杜絕此類低級錯誤。