一、比如appsettings.json里面有這樣一段代碼
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"ConnectionStrings": {
"ErpConnection": "server=192.111.1.1;database=Erp;uid=sa;pwd=123;MultipleActiveResultSets=true;"
}
}
二、在Startup 類中,我們需要讀取 數據庫連接字符串 ErpConnection,可以這樣
public class Startup
{
//注入配置類
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<Dbs.Models.ErpContext>(options =>
{
//2種方法都可以連接數據庫
//方法1:直接通過 GetConnectionString 方法獲取節點
//options.UseSqlServer(Configuration.GetConnectionString("ErpConnection"));
//方法2:通過GetSection 一級一級獲取節點
//options.UseSqlServer(Configuration.GetSection("ConnectionStrings").GetSection("ErpConnection").Value);
options.UseSqlServer(Configuration.GetSection("ConnectionStrings:ErpConnection").Value);
}, ServiceLifetime.Transient);
}
}
三、使用GetSection()獲取復雜的值
比如我們在appsettings.json中有這樣一段配置
{
"AppConnectionStrings": {
"PathPrefix": "",
"Something": "Something context",
"Clients": { "line": "longclients" }
}
}
如果我們想要獲取Clients的值,我們可能會這樣操作
var clients = Configuration.GetSection("AppConnectionStrings:Clients").Value;
結果返回的 clients 是null。
其實我們正確的做法是這樣的:
1、我們要根據json的數據格式創建相應的類
public class AppConnectionStrings
{
public string PathPrefix { get; set; }
public string Something { get; set; }
public Clients Clients { get; set; }
}
public class Clients
{
public string line { get; set; }
}
2、將Options服務添加到服務集合並從配置中加載設置
public void ConfigureServices(IServiceCollection services)
{
// This is only required for .NET Core 2.0
services.AddOptions();
services.Configure<AppConnectionStrings>(Configuration.GetSection("AppConnectionStrings"));
services.AddMvc();
}
注:也可以通過指定要加載的配置部分來加載方法中的子選項
services.Configure<Clients>(Configuration.GetSection("AppConnectionStrings:Clients");
3、控制器中我們可以通過構造函數注入IOptions<Clients>
來讀取
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
private readonly AppConnectionStrings _settings;
public TestController(IOptions<AppConnectionStrings> settings)
{
_settings = settings.Value;
}
[Route("GetAppConnectionStrings")]
[HttpGet]
public ActionResult<JObject> GetAppConnectionStrings()
{
return JObject.FromObject( _settings);
}
}
我們請求GetAppConnectionStrings接口的時候,就得到相應配置數據
注:使用前一定要先在Startup 類中注入服務services.Configure<AppConnectionStrings>(Configuration.GetSection("AppConnectionStrings"));
沒有這一步,讀取不了數據: