網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
前言
在ASP.NET ,我們使用XML格式的.Config文件來(lái)作為配置文件,而在ASP.NET Core,我們有了更多的選擇,可以用回XML,也可以用Json、Ini文件作為配置文件
Json配置文件的使用
在創(chuàng)建ASP.NET Core的項(xiàng)目的時(shí)候,框架會(huì)自動(dòng)添加appsettings.json文件和添加IConfiguration的注入。
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
當(dāng)我們?cè)赟tartup構(gòu)造函數(shù)添加一個(gè)IConfiguration參數(shù),框架就會(huì)根據(jù)注入庫(kù)來(lái)進(jìn)行注入,除此之外還有IHostingEnvironment,如果在構(gòu)造函數(shù)添加這個(gè)參數(shù),框架也會(huì)注入對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)
如果我們想要自己添加Json配置,該怎么做呢?
//SetBasePath方法用來(lái)指定配置文件的所在地,env.ContentRootPath是獲取或設(shè)置包含應(yīng)用程序內(nèi)容文件的目錄的絕對(duì)路徑。 //AddJsonFile方法是使用JsonConfigurationSource來(lái)接收J(rèn)son文件,并添加到ConfigurationBuilder中的Sources中 //Build()調(diào)用 var config=new ConfigurationBuilder().SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json") .Build(); Configuration = config;
如果不通過(guò)IHostingEnvironment來(lái)獲取絕對(duì)路徑,也可以使用Directory.GetCurrentDirectory()方法來(lái)獲得
測(cè)試:
public IActionResult Index()
{
var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
string value = config.GetConnectionString("MySqlConnection");
string value2 = config.GetSection("Test").Value;
return Content($"{value},Test:{value2}");
}
public IActionResult Index()
{
var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
string value = config.GetConnectionString("MySqlConnection");
string value2 = config.GetSection("Test").Value;
return Content($"{value},Test:{value2}");
}
那復(fù)雜的鍵值或者數(shù)組,又該如何獲得呢?
{
"Teacher": {
"name": "Tom",
"age": "12",
"Students": [
{
"name": "Docker",
"age": "13"
},
{
"name": "Nginx",
"age": "45"
}
]
}
}
我們想要獲取Teacher的name值和數(shù)組Students第二個(gè)的name值,怎么獲取呢?
public IActionResult Index()
{
var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
string value = config.GetSection("Teacher:name").Value;
//
string value2 = config.GetSection("Teacher:Students:1:name").Value;
return Content($"{value},Test:{value2}");
}
PS:從Teacher:name和Teacher:Students:1:name這兩個(gè)中可以尋找規(guī)律,當(dāng)然獲取方式不止這一種,還可以使用Config[“Teacher:Students:1:name”]來(lái)獲取
如果我們想用對(duì)象來(lái)存儲(chǔ)配置文件的鍵值該如何做呢?
//appsetting.json
{
"RedisConfig": {
"host": "127.0.0.1",
"MasterPort": "6379",
"SlavePort": "6380",
"PassWord": "wen123"
}
}
RedisHelper類(lèi)
public class RedisHelper:IRedis
{
public string host { get; set; }
public string MasterPort { get; set; }
public string SlavePort { get; set; }
public string PassWord { get; set; }
}
public IActionResult Index()
{
var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
//創(chuàng)建一個(gè)自帶的IOC容器
var collection = new ServiceCollection();
collection.AddOptions().Configure<RedisHelper>(config.GetSection("RedisConfig"));
RedisHelper redishelper = collection.BuildServiceProvider().GetService<IOptions<RedisHelper>>().Value;
return Content($"host:{redishelper.host},MasterPort:{redishelper.MasterPort}");
}
還有另一種寫(xiě)法:在Startup類(lèi)的ConfigureServices方法里面,向services添加代碼,通過(guò)構(gòu)造函數(shù)來(lái)構(gòu)造RedisHelper類(lèi)
services.AddOptions().Configure<RedisHelper>(Configuration.GetSection("RedisConfig"));
private RedisHelper _redis;
public HomeController(IOptions<RedisHelper> options)
{
_redis = options.Value;
}
public IActionResult Index()
{
return Content($"host:{_redis.host},MasterPort:{_redis.MasterPort}");
}
XML配置文件的使用
這里簡(jiǎn)單記錄一下,提取配置文件的值大致與上面做法沒(méi)有太大的區(qū)別,在構(gòu)造IConfiguration的時(shí)候把AddJsonFile改成AddXmlFile就行了
//XMLDemo文件 <?xml version="1.0" encoding="utf-8" ?> <Test> <mysqlConnectionStrings>sdfl</mysqlConnectionStrings> <test> <connection>sdfasdf</connection> <connection2>sdfdsafsfs</connection2> </test> <test2> <test3> <connection>dfgfdg</connection> </test3> </test2> </Test>
public IActionResult Index()
{
var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
.AddXmlFile("XMLDemo.xml").Build();
var value = config.GetSection("mysqlConnectionStrings").Value;
var value2 = config.GetSection("test:connection2").Value;
return Content($"value:{value},value2:{value2}");
原文鏈接:https://blog.csdn.net/MDZZ666/article/details/96282039
相關(guān)推薦
- 2022-07-09 Jquery操作DOM元素方法詳解_jquery
- 2024-03-04 layui tree組件實(shí)現(xiàn)搜索節(jié)點(diǎn)并展開(kāi)
- 2022-08-26 C++類(lèi)模板實(shí)戰(zhàn)之vector容器的實(shí)現(xiàn)_C 語(yǔ)言
- 2022-05-11 Restful的Get請(qǐng)求參數(shù)為L(zhǎng)ist
- 2023-03-04 linux服務(wù)器CPU飆高排查分析_Linux
- 2022-06-06 Array.prototype.myjoin
- 2021-12-12 Oracle數(shù)據(jù)庫(kù)的備份與恢復(fù)案例詳解_oracle
- 2022-10-22 PostgreSql生產(chǎn)級(jí)別數(shù)據(jù)庫(kù)安裝要注意事項(xiàng)_PostgreSQL
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支