【.Net8教程】(一)读取配置文件全面总结
2023-12-23 22:53:20
环境:.net8.0
1. 准备条件
先在appsettings.Development.json或appsettings.json添加配置
添加一个DbOption
{
"DbOption": {
"Conn": "foolishsunday@csdn"
}
}
2.直接读取json配置节点的几种写法
在Main函数中读取json配置
方式一
var conn1 = builder.Configuration["DbOption:Conn"];
方式二
var conn2 = builder.Configuration.GetValue<string>("DbOption:Conn");
方式三
var conn3 = builder.Configuration.GetSection("DbOption").GetSection("Conn").Value;
方式四
var conn4 = builder.Configuration.GetSection("DbOption")["Conn"];
3.转化为类或record类型
定义类
public class DbOption
{
public string Conn { get; set; }
}
转化
DbOption opt = builder.Configuration.GetSection(nameof(DbOption)).Get<DbOption>();
4.通过注入IConfiguration方式
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
private readonly IConfiguration _configuration;
public TestController(IConfiguration configuration)
{
_configuration = configuration;
}
[HttpPost]
public async Task<IActionResult> GetConfig()
{
var conn1 = _configuration["DbOption:Conn"];
var conn2 = _configuration.GetValue<string>("DbOption:Conn");
var conn3 = _configuration.GetSection(nameof(DbOption)).GetSection("Conn").Value;
return Ok();
}
}
5.或通过Options模式(推荐)
写法一
builder.Services.Configure<DbOption>(builder.Configuration.GetSection(nameof(DbOption)));
写法二
builder.Services.AddOptions<DbOption>().Bind(builder.Configuration.GetSection(nameof(DbOption)));
写法三
builder.Services.AddOptions<DbOption>().BindConfiguration(nameof(DbOption));
然后通过注入IOptions、IOptionsMonitor或IOptionsSnapshot获取
[ApiController]
[Route("[controller]")]
public class DemoController : ControllerBase
{
private readonly DbOption _dbOption;
public DemoController(IOptionsSnapshot<DbOption> dbOption)
{
_dbOption = dbOption.Value;//注意此处为.Value
}
}
推荐使用IOptionsSnapshot
Options模式有三个接口IOptions、IOptionsMonitor或IOptionsSnapshot
IOption :单例,一旦生成就不会再更改,除非通过代码的方式更改;
OptionsMonitor :也是单例,但是它只要配置有变更,它就会更新,能通过代码的方式更改值;
IOptionsSnapshot :作用域注册,一次请求里值不会变,在配置文件更新的下一次请求,它的值会更新,但是它不能跨范围通过代码的方式更改值,只能在当前范围(请求)内有效
校验
其中写法二与写法三,如果忘记了配置,获取到值为null,是不会报错的。
如果需要在获取到null时报错,则可以添加Validate校(可抛OptionsValidationException异常)
builder.Services.AddOptions<DbOption>().BindConfiguration(nameof(DbOption))
.Validate(option =>
{
if (string.IsNullOrEmpty(option.Conn)) return false;
else return true;
});
6. 注意:调试和发布后启动,读取配置文件的区别
1、当启动vs调试时,由于启动的环境是Development,所以读取配置文件会优先读取appsettings.Development.json;如果没有值,才读取appsettings.json的值;
2、但当我们发布程序启动后(如双击.exe启动),则读取的是appsettings.json文件。
此区别可能会造成初学者产生混淆。
文章来源:https://blog.csdn.net/u011340439/article/details/135168537
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!