最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#讀取appsettings.json配置的常用方法

 更新時間:2026年03月09日 08:26:35   作者:xyy123  
本文檔介紹了在 C# 項目中讀取 appsettings.json 文件的常用方法,涵蓋了現(xiàn)代 .NET 的依賴注入(DI)模式以及適用于非 DI 環(huán)境的靜態(tài)讀取模式,并詳細(xì)說明了不同數(shù)據(jù)類型的讀取方式及常見踩坑點,需要的朋友可以參考下

本文檔介紹了在 C# 項目中讀取 appsettings.json 文件的常用方法,涵蓋了現(xiàn)代 .NET 的依賴注入(DI)模式以及適用于非 DI 環(huán)境的靜態(tài)讀取模式,并詳細(xì)說明了不同數(shù)據(jù)類型的讀取方式及常見踩坑點。

示例配置文件準(zhǔn)備

在開始之前,在項目根目錄創(chuàng)建一個 appsettings.json 文件,內(nèi)容如下:

{
  "AppName": "MyAwesomeApp",
  "MaxUsers": 100,
  "SupportedLanguages": [ "zh-CN", "en-US", "ja-JP" ],
  "Database": {
    "Host": "127.0.0.1",
    "Port": 3306
  }
}

極其重要的第一步:

在 Visual Studio 中,右鍵點擊 appsettings.json -> 屬性 -> 將 “復(fù)制到輸出目錄” (Copy to Output Directory) 設(shè)置為 “如果較新則復(fù)制” (Copy if newer) 。否則程序運(yùn)行時會報找不到文件的錯誤!

模式一:依賴注入模式(推薦)

適用于 ASP.NET Core、Worker Service 等自帶依賴注入容器的現(xiàn)代 .NET 項目。推薦使用強(qiáng)類型綁定(Options Pattern)。

1. 定義映射類

public class DatabaseOptions
{
    public string Host { get; set; }
    public int Port { get; set; }
}

2. 注冊配置 (Program.cs)

var builder = WebApplication.CreateBuilder(args);

// 將 JSON 中的 "Database" 節(jié)點綁定到 DatabaseOptions 類
builder.Services.Configure<DatabaseOptions>(builder.Configuration.GetSection("Database"));

3. 在服務(wù)中注入并使用

public class MyService
{
    private readonly DatabaseOptions _dbOptions;

    // 使用 IOptions<T> 注入
    public MyService(IOptions<DatabaseOptions> options)
    {
        _dbOptions = options.Value;
    }

    public void Connect()
    {
        Console.WriteLine($"Connecting to {_dbOptions.Host}:{_dbOptions.Port}");
    }
}

模式二:靜態(tài)工具類模式(隨時隨地讀取)

適用于控制臺應(yīng)用、WinForms/WPF,或者你想在任意靜態(tài)方法中直接讀取配置的場景。

前置準(zhǔn)備: 通過 NuGet 安裝以下包:

  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Configuration.Binder

1. 創(chuàng)建靜態(tài)配置助手類

使用靜態(tài)構(gòu)造函數(shù)確保配置只被加載一次:

using Microsoft.Extensions.Configuration;
using System.IO;

public static class ConfigHelper
{
    public static IConfiguration Configuration { get; }

    static ConfigHelper()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
            
        Configuration = builder.Build();
    }
}

2. 按數(shù)據(jù)類型讀取示例

以下代碼演示了如何使用 ConfigHelper 讀取不同類別的數(shù)據(jù):

using System;
using System.Collections.Generic;
using Microsoft.Extensions.Configuration;

public class ConfigDemo
{
    public static void Run()
    {
        // ----------------------------------------------------
        // 1. 讀取基本類型 (String, Int, Bool 等)
        // 使用 GetValue<T> 可以在找不到配置時提供一個 fallback (默認(rèn)值)
        // ----------------------------------------------------
        string appName = ConfigHelper.Configuration.GetValue<string>("AppName", "DefaultApp");
        int maxUsers = ConfigHelper.Configuration.GetValue<int>("MaxUsers", 50);
        
        Console.WriteLine($"App: {appName}, Max Users: {maxUsers}");

        // ----------------------------------------------------
        // 2. 讀取列表 (List / Array)
        // 需先 GetSection() 獲取節(jié)點,再 Get<T>() 綁定
        // ----------------------------------------------------
        var languages = ConfigHelper.Configuration.GetSection("SupportedLanguages").Get<List<string>>();
        
        if (languages != null)
        {
            Console.WriteLine("Languages: " + string.Join(", ", languages));
        }

        // ----------------------------------------------------
        // 3. 讀取對象 (Object)
        // 同樣先獲取節(jié)點,再綁定到 C# 實體類
        // ----------------------------------------------------
        var dbConfig = ConfigHelper.Configuration.GetSection("Database").Get<DatabaseOptions>();
        
        if (dbConfig != null)
        {
            Console.WriteLine($"DB Port: {dbConfig.Port}");
        }
    }
}

常見異常與排錯指南 (Troubleshooting)

在讀取配置文件時,經(jīng)常會遇到以下兩種邊緣情況,請務(wù)必在代碼中做好防御性編程:

1. 鍵不存在或值為空 (Null)

現(xiàn)象: 不會報錯拋出異常。

表現(xiàn):

  • 使用 GetValue<T>() 時,如果沒有提供默認(rèn)值,會返回類型 T 的默認(rèn)值(如 int 變?yōu)?0bool 變?yōu)?false)。
  • 使用 .Get<List<T>>().Get<Object>() 時,如果節(jié)點不存在,會返回 null。

應(yīng)對方案: 對于對象和列表,使用前必須進(jìn)行判空校驗 (if (obj != null)) ,或者在 C# 類定義時初始化為空列表(例如 public List<string> Langs { get; set; } = new();)。

2. 數(shù)據(jù)類型不匹配

現(xiàn)象: 會拋出 System.InvalidOperationException 異常。

表現(xiàn): 比如 JSON 中寫的是 "MaxUsers": "一百",但你試圖用 GetValue<int>("MaxUsers") 讀取。底層轉(zhuǎn)換器無法將 "一百" 解析為整型,程序?qū)⒈罎ⅰ?/p>

應(yīng)對方案: * 嚴(yán)格規(guī)范 JSON 的數(shù)據(jù)類型(數(shù)字不要加雙引號,保持為純數(shù)字)。

對于高度不可信的外部配置,建議先讀取為 string,然后使用 int.TryParse() 進(jìn)行安全轉(zhuǎn)換:

string rawValue = ConfigHelper.Configuration["MaxUsers"];
if (int.TryParse(rawValue, out int safeMaxUsers)) {
    // 解析成功,使用 safeMaxUsers
} else {
    // 解析失敗,使用默認(rèn)邏輯
}

到此這篇關(guān)于C#讀取appsettings.json配置的常用方法的文章就介紹到這了,更多相關(guān)C#讀取appsettings.json配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#高效實現(xiàn)凍結(jié)Excel行和列的完整代碼

    C#高效實現(xiàn)凍結(jié)Excel行和列的完整代碼

    凍結(jié)行和列可以確保重要數(shù)據(jù)(如標(biāo)題)在你瀏覽工作表時始終可見,此功能在處理大型數(shù)據(jù)集時非常有用,下面我們就來看看如何使用 C# 來凍結(jié) Excel 中的行和列吧
    2025-12-12
  • C#調(diào)用執(zhí)行命令行窗口(CMD)的方法與技巧

    C#調(diào)用執(zhí)行命令行窗口(CMD)的方法與技巧

    在 C# 的編程世界里,我們常常會遇到需要與操作系統(tǒng)底層進(jìn)行交互的場景,這時,調(diào)用命令行窗口(CMD)就成為了一個強(qiáng)大的工具,通過 C# 調(diào)用 CMD 都能為我們提供極大的便利,極大地拓展了 C# 應(yīng)用程序的功能邊界,本文介紹了C#中調(diào)用執(zhí)行CMD的方法與技巧
    2025-01-01
  • C# 中的IComparable和IComparer的使用及區(qū)別

    C# 中的IComparable和IComparer的使用及區(qū)別

    這篇文章主要介紹了C# 中的IComparable和IComparer的使用及區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 淺談C#9.0新特性之參數(shù)非空檢查簡化

    淺談C#9.0新特性之參數(shù)非空檢查簡化

    這篇文章主要介紹了淺談C#9.0新特性之參數(shù)非空檢查簡化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • C#中TextBox的橫線樣式及占位提示詳解

    C#中TextBox的橫線樣式及占位提示詳解

    橫線樣式就是將TextBox以一條底橫線的形式展示在頁面,占位提示就是Web的Placeholder屬性,即在輸入框沒有內(nèi)容的時候進(jìn)行一個輸入提示。本文主要介紹了C#中TextBox的這兩個的實現(xiàn),需要的可以參考一下
    2022-11-11
  • C#自定義字符串替換Replace方法實例

    C#自定義字符串替換Replace方法實例

    這篇文章主要介紹了C#自定義字符串替換Replace方法,以兩個不同實例對比分析了C#自定義字符串替換Replace的方法,是C#關(guān)于字符串操作的典型應(yīng)用,需要的朋友可以參考下
    2014-11-11
  • C#實現(xiàn)注冊碼注冊機(jī)制效果詳解

    C#實現(xiàn)注冊碼注冊機(jī)制效果詳解

    這篇文章主要為大家詳細(xì)介紹了C#如何實現(xiàn)注冊碼注冊機(jī)制效果,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • 基于C#實現(xiàn)的仿windows左側(cè)伸縮菜單效果

    基于C#實現(xiàn)的仿windows左側(cè)伸縮菜單效果

    這篇文章主要介紹了基于C#實現(xiàn)的仿windows左側(cè)伸縮菜單效果,比較實用的功能,需要的朋友可以參考下
    2014-08-08
  • C# WebAPI的幾種返回類型方式

    C# WebAPI的幾種返回類型方式

    本文主要介紹了C# WebAPI的幾種返回類型方式,包括直接返回指定類型、返回IActionResult實例和返回ActionResult,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • C#中DataGridView操作技巧

    C#中DataGridView操作技巧

    這篇文章主要介紹了C#中DataGridView操作技巧,包括了DataGridView的初始化、添加行、添加列、排序等操作技巧,非常具有實用價值,需要的朋友可以參考下
    2014-12-12

最新評論

六枝特区| 依兰县| 巨鹿县| 封开县| 依安县| 申扎县| 深圳市| 台湾省| 封丘县| 海阳市| 清涧县| 盘锦市| 五大连池市| 罗城| 安福县| 镇赉县| 柯坪县| 额尔古纳市| 资中县| 林西县| 祁东县| 兰州市| 玉树县| 沂源县| 双鸭山市| 定陶县| 古田县| 云安县| 呼玛县| 土默特右旗| 东平县| 南陵县| 连城县| 东丽区| 太谷县| 隆化县| 岳池县| 监利县| 缙云县| 乐业县| 北辰区|