zoukankan      html  css  js  c++  java
  • 如何获取 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"));
    没有这一步,读取不了数据:

  • 相关阅读:
    1015. 德才论
    1014. 福尔摩斯的约会
    1013. 数素数
    1012. 数字分类
    1011. A+B和C
    1010. 一元多项式求导
    1009. 说反话
    1008. 数组元素循环右移问题
    1007. 素数对猜想
    1006. 换个格式输出整数
  • 原文地址:https://www.cnblogs.com/qingheshiguang/p/14316472.html
Copyright © 2011-2022 走看看