如何獲取 appsettings.json 里的值


一、比如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"));
沒有這一步,讀取不了數據:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM