首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

ASP.NET 三層架構報「引用對象為空」?多半是大小寫或拼寫錯誤

     編輯:程式設計綜合問答

ASP.NET 三層架構開發中,初學者常遇到「未將對象引用設置到對象的實例」即 NullReferenceException。配置文件 Web.config 明明寫了,為什麼還是報空?

最佳回答一針見血

「大小寫搞錯了,還多了一個空格。」

常見導致 NullReference 的配置錯誤

1. 連接字串名稱大小寫不匹配

<!-- Web.config -->
<connectionStrings>
    <add name="MyConnStr" connectionString="..." />  <!-- 實際名稱 -->
</connectionStrings>

// 代碼中
string connStr = ConfigurationManager.ConnectionStrings["myconnstr"].ConnectionString; 
// 錯誤:大小寫不一致 → 返回 null → 後續 new SqlConnection(null) 拋出異常

2. 鍵名多餘空格

<add name="MyConnStr " connectionString="..." />  <!-- 結尾有空格 -->

// 代碼
var str = ConfigurationManager.ConnectionStrings["MyConnStr"].ConnectionString; 
// 鍵名不匹配(含空格 vs 不含) → null

3. 節點名稱拼寫錯誤

<appSettings>
    <add key="ApiUrl" value="..." />  <!-- 正確 -->
</appSettings>

// 代碼
string url = ConfigurationManager.AppSettings["ApiURl"]; // 'L' 大小寫錯 → null

快速排查檢查清單

  1. 複製貼上:從 Web.config 複製鍵名到代碼,避免手打錯誤
  2. Trim() 處理:ConfigurationManager.AppSettings[key]?.Trim()
  3. 判空防護:
    var connStr = ConfigurationManager.ConnectionStrings["MyConnStr"];
    if (connStr == null) throw new ConfigurationErrorsException("連接字串 'MyConnStr' 未找到,請檢查 Web.config");
    string conn = connStr.ConnectionString;
  4. 檢查 config 變更是否生效:修改 Web.config 後需**重啟應用程式池**或**重新啟動網站**才會重新載入
  5. 確認正在讀取的配置文件:發布後可能讀取的是伺服器上的 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% 的「配置正確但讀取為空」問題,本質上都是**字串匹配失敗**:大小寫、空格、拼寫、節點名稱。養成「複製貼上鍵名 + 判空防護 + 強型別綁定」習慣,即可徹底杜絕此類低級錯誤。

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