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"));
    没有这一步,读取不了数据:

  • 相关阅读:
    Socket异步通信
    以读取博客园随笔备份为例 将xml 序列化成json,再序列化成对象
    NhibernateProfiler写个自动破解工具
    关于下载GAE High Replication Datastore数据
    .text 0.958 数据添加
    C#实现RTP数据包传输参照RFC3550
    在线商城表结构
    相似字符串
    .net 4.0 的Socket写的支持跨平台双工的轻量级通讯组件
    写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
  • 原文地址:https://www.cnblogs.com/qingheshiguang/p/14316472.html
Copyright © 2011-2022 走看看