讀取.net core配置檔案appsetting.json內容

幽冥狂_七發表於2024-07-03

appsetting.json內容

//省略部分程式碼...
//程式碼生成相關
  "CodeCreatorInfo": {
    "xmlPath": "11111", //xml路徑(絕對路徑)
    "jsRootPaht": "2222", //js資料夾路徑
    "Controllers": "333", //特殊Controller列表,逗號隔開
    "NameSpace": "4444" //有效名稱空間:"App.Web."之後的內容,主要用於多專案的專案,以逗號分隔,例如:APIControllers1,APIControllers2
  } 
//省略部分程式碼...

方法一:控制器中獲取json,採用依賴注入的方式

1、引用庫
using Microsoft.Extensions.Configuration;

2、使用介面服務:IConfiguration

注:觀察這個類,這已經被 CodeCreatorController 自動注入了,無需手動做注入操作

using Microsoft.Extensions.Configuration;

namespace App.Web.APIControllers
{
    /// <summary>
    /// js程式碼生成介面
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class CodeCreatorController : BaseAPIController1
    {
        /// <summary>
        /// 自動注入
        /// </summary>
        /// <param name="configuration"></param>
        public CodeCreatorController(IConfiguration configuration)
        {
            _configuration = configuration;
        }
        public IConfiguration _configuration { get; }


        /// <summary>
        /// 獲取XML文件內容,生成js檔案內容,生成兩種,分別用於頁面和小程式
        /// </summary>
        [HttpGet]
        public JsonResult CreateJsByXML()
        {
            //獲取appsettiong配置內容
            var CodeCreatorInfo = _configuration.GetSection("CodeCreatorInfo");
            string xmlPath = _configuration.GetSection("CodeCreatorInfo")["xmlPath"];
            
            /*
            省略部分程式碼            
            */
        }
    }
}

注意:如果專案中需要用到反射,此時對應當前 Controller 的反射時會出錯。可以使用方法二

方法二:在.net core 類庫中讀取json檔案

1、新增引用:
using System.Configuration;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;

2、載入配置檔案的服務類:

/// <summary>
    /// 獲取appsetting的服務類
    /// </summary>
    public class AppConfigurtaionServices
    {
        public static IConfiguration Configuration { get; set; }
        static AppConfigurtaionServices()
        {
            //ReloadOnChange = true 當appsettings.json被修改時重新載入            
            Configuration = new ConfigurationBuilder()
            //.SetBasePath(Directory.GetCurrentDirectory())
            //AppDomain.CurrentDomain.BaseDirectory是程式集基目錄,所以appsettings.json,需要複製一份放在程式集目錄下,
            .SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
            .Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
            .Build();
        }
    }

3、獲取資料:

/*省略部分程式碼*/ 
//類庫中讀取:兩種取值方式【OK】
var xmlPath = AppConfigurtaionServices.Configuration.GetSection("CodeCreatorInfo:xmlPath").Value;
var jsRootPaht = AppConfigurtaionServices.Configuration.GetSection("CodeCreatorInfo").GetSection("jsRootPaht").Value;
var Controllers = AppConfigurtaionServices.Configuration.GetSection("CodeCreatorInfo").GetSection("Controllers").Value;
var NameSpace = AppConfigurtaionServices.Configuration.GetSection("CodeCreatorInfo").GetSection("NameSpace").Value;
var ControllersArray = Controllers.Split(',');
var NameSpaceArray = NameSpace.Split(',');
/*省略部分程式碼*/

原文:https://www.cnblogs.com/dyhao/p/13065774.html

相關文章