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

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

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

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

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

在開始之前,在項(xiàng)目根目錄創(chuàng)建一個(gè) 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 中,右鍵點(diǎn)擊 appsettings.json -> 屬性 -> 將 “復(fù)制到輸出目錄” (Copy to Output Directory) 設(shè)置為 “如果較新則復(fù)制” (Copy if newer) 。否則程序運(yùn)行時(shí)會(huì)報(bào)找不到文件的錯(cuò)誤!

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

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

1. 定義映射類

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

2. 注冊(cè)配置 (Program.cs)

var builder = WebApplication.CreateBuilder(args);

// 將 JSON 中的 "Database" 節(jié)點(diǎn)綁定到 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)工具類模式(隨時(shí)隨地讀取)

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

前置準(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> 可以在找不到配置時(shí)提供一個(gè) 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é)點(diǎn),再 Get<T>() 綁定
        // ----------------------------------------------------
        var languages = ConfigHelper.Configuration.GetSection("SupportedLanguages").Get<List<string>>();
        
        if (languages != null)
        {
            Console.WriteLine("Languages: " + string.Join(", ", languages));
        }

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

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

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

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

現(xiàn)象: 不會(huì)報(bào)錯(cuò)拋出異常。

表現(xiàn):

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

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

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

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

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

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

對(duì)于高度不可信的外部配置,建議先讀取為 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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

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

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

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

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

    在 C# 的編程世界里,我們常常會(huì)遇到需要與操作系統(tǒng)底層進(jìn)行交互的場(chǎng)景,這時(shí),調(diào)用命令行窗口(CMD)就成為了一個(gè)強(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ì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 淺談C#9.0新特性之參數(shù)非空檢查簡(jiǎn)化

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

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

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

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

    C#自定義字符串替換Replace方法實(shí)例

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

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

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

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

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

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

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

    C#中DataGridView操作技巧

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

最新評(píng)論

东丰县| 周宁县| 镇远县| 弋阳县| 定边县| 镇宁| 蒙城县| 仙桃市| 宝兴县| 陆川县| 鹤壁市| 漳浦县| 正阳县| 涟源市| 牡丹江市| 黄大仙区| 兴义市| 安多县| 永昌县| 荣昌县| 万州区| 平遥县| 阿拉善盟| 陇西县| 达孜县| 桂东县| 当涂县| 汤原县| 永定县| 万山特区| 广河县| 沅江市| 枣庄市| 永济市| 威信县| 右玉县| 武隆县| 玛多县| 公主岭市| 黔东| 土默特左旗|