ASP.NET读取配置文件的多种方式详解
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">IConfiguration</a></li><li><a href="#_label1">通过GetValue方法获取</a></li><li><a href="#_label2">通过GetSection方法获取</a></li><li><a href="#_label3">使用委托来配置选项</a></li></ul></div><p>ASP.NET Core项⽬默认的配置⽂件是appsettings.json,创建项⽬时就会⾃动⽣成这个文件,我们可以将⼀些配置信息存放在这个配置⽂件中,这样做的好处是当我们修改配置⽂件 时,不在需要重启应⽤,可以实现热更新。</p><div class="jb51code"><pre class="brush:json;">{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"msg": "hello world"
}
</pre></div>
<p class="maodian"><a name="_label0"></a></p><h2>IConfiguration</h2>
<p>个路由终结点来演⽰如何读取这个配置</p>
<div class="jb51code"><pre class="brush:csharp;">app.MapGet("config", (IConfiguration configuration) =>
{
return configuration["msg"] + "_" +
configuration["Logging:LogLevel:Default"];
});
</pre></div>
<p>通过IOC注⼊IConfiguration对象,我们就可以访问不同节点的配置了,如果是单层节点, 通过configuration[“msg”]的⽅式进⾏访问,如果是多层级,则通过 configuration[“Logging:LogLevel:Default”]来访问</p>
<p class="maodian"><a name="_label1"></a></p><h2>通过GetValue方法获取</h2>
<div class="jb51code"><pre class="brush:csharp;">app.MapGet("config", (IConfiguration configuration) =>
{
return configuration.GetValue<string>("msg");
});
</pre></div>
<p>GetValue⽆法读取对象,会报异常</p>
<p class="maodian"><a name="_label2"></a></p><h2>通过GetSection方法获取</h2>
<div class="jb51code"><pre class="brush:csharp;">app.MapGet("config", (IConfiguration configuration) =>
{
return configuration.GetSection("msg").Value;
});
</pre></div>
<p>读取对象</p>
<div class="jb51code"><pre class="brush:csharp;">app.MapGet("config", (IConfiguration configuration) =>
{
return configuration.GetSection("Person").Get<Person>();
});
</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>使用委托来配置选项</h2>
<p>先定义⼀个实体:</p>
<div class="jb51code"><pre class="brush:csharp;">public class Person
{
public string Name { get;set; }
public int Age { get;set; }
}
</pre></div>
<p>配置如下:</p>
<div class="jb51code"><pre class="brush:json;">"Person": {
"Name": "张三",
"Age": 18
}
</pre></div>
<p>注册配置:</p>
<div class="jb51code"><pre class="brush:csharp;">builder.Services.Configure<Person>
(builder.Configuration.GetSection("Person"));
</pre></div>
<p>使⽤配置:</p>
<div class="jb51code"><pre class="brush:csharp;">app.MapGet("config", (IOptions<Person> options) =>
{
return $"{options.Value.Name},{options.Value.Age}";
});</pre></div>
頁:
[1]