1. 控制台应用

  新建一个控制台应用,添加两个Package:

Install-Package Microsoft.Extensions.Configuration
Install-Package Microsoft.Extensions.Configuration.Json

1.1 单个配置文件

  创建配置文件appsettings.json:

{
"Data": "10000",
"ConnectionStrings": {
"DevContext": "开发库",
"ProdContext": "生产库"
}
}

  读取配置文件:

using System;

using System.IO;
using Microsoft.Extensions.Configuration; namespace Libing.Core.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var config = builder.Build(); Console.WriteLine(config["Data"]); // 配置键
Console.WriteLine(config.GetSection("ConnectionStrings:DevContext").Value); // 分层键
}
}
}

  通过ConfigurationBuilder对象来创建ConfigurationRoot对象,进行读取配置文件。

  SetBasePath:设置配置文件基础路径

  AddJsonFile:添加读取的Json文件

var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");

  配置文件可选及修改自动加载设置:

var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");

  配置键约定:

  (1)键不区分大小写。 例如,ConnectionString 和 connectionstring 被视为等效键。

  (2)分层键使用冒号分隔符 (:)

1.2 多个配置文件

  AddJsonFile:添加多个配置文件。

var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.Development.json", optional: true, reloadOnChange: true);
{
"Data": "10000",
"ConnectionStrings": {
"DefaultContext": "默认库"
}
}

appsettings.json

{
"Data": "10000",
"ConnectionStrings": {
"DefaultContext": "开发库"
}
}

appsettings.Development.json

using System;

using System.IO;
using Microsoft.Extensions.Configuration; namespace Libing.Core.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.Development.json");
var config = builder.Build(); Console.WriteLine(config.GetConnectionString("DefaultContext")); // 输出:开发库
}
}
}
using System;

using System.IO;
using Microsoft.Extensions.Configuration; namespace Libing.Core.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.Development.json")
.AddJsonFile("appsettings.json");
var config = builder.Build(); Console.WriteLine(config.GetConnectionString("DefaultContext")); // 输出:默认库
}
}
}

  配置键相同时,读取选择最后一个添加的文件(AddJsonFile)。

  若要读取所有添加文件的配置信息,可遍历ConfigurationRoot的Providers属性。

using System;

using System.IO;
using Microsoft.Extensions.Configuration; namespace Libing.Core.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.AddJsonFile("appsettings.Development.json");
var config = builder.Build(); foreach (var provider in config.Providers)
{
provider.TryGet("ConnectionStrings:DefaultContext", out string defaultContext);
Console.WriteLine(defaultContext);
} // 输出:默认库
// 开发库
}
}
}

1.3 配置读取绑定

  (1)Key读取(键值对)

{
"AppID": 10000,
"Node": {
"ID": "1",
"Text": "节点"
}
}
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var config = builder.Build(); var appID = config["AppID"];
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var config = builder.Build(); var nodeid = config.GetSection("Node").GetSection("ID").Value;

  (2)绑定简单数据类型 GetValue<T>

  添加Package:Microsoft.Extensions.Configuration.Binder

using System;

using System.IO;
using Microsoft.Extensions.Configuration; namespace Libing.Core.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var config = builder.Build(); var appID = config.GetValue<int>("AppID");
Console.WriteLine(appID);
}
}
}

  (3)绑定到类对象  Get<T>

using System;
using System.Collections.Generic;
using System.Text; namespace Libing.Core.ConsoleApp
{
public class Node
{
public int ID { get; set; } public string Text { get; set; }
}
}

Node.cs

using System;

using System.IO;
using Microsoft.Extensions.Configuration; namespace Libing.Core.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var config = builder.Build(); var node = config.GetSection("Node").Get<Node>(); Console.WriteLine("{0}-{1}", node.ID, node.Text);
}
}
}

  (4)绑定集合对象

{
"Node": {
"ID": 1,
"Text": "节点",
"Children": [
{
"ID": 11,
"Text": "子节点1"
},
{
"ID": 12,
"Text": "子节点2"
},
{
"ID": 13,
"Text": "子节点3"
}
]
}
}

appsettings.json

using System;

using System.Collections.Generic;

using System.IO;
using Microsoft.Extensions.Configuration; namespace Libing.Core.ConsoleApp
{
class Program
{
static void Main(string[] args)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(cfg =>
{
cfg.Path = "appsettings.json";
cfg.Optional = false;
cfg.ReloadOnChange = true;
});
var config = builder.Build(); var children = config.GetSection("Node:Children").Get<IEnumerable<Node>>();
foreach (var child in children)
{
Console.WriteLine("{0}-{1}", child.ID, child.Text);
}
}
}
}

2. API应用程序

  新建API应用程序,在根目录下自动创建的Program.cs:

public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
} public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}

其中,CreateDefaultBuilder创建默认配置,包括:

  (1)加载IConfiguration配置,读取文件appsettings.json;

  (2)加载IConfiguration配置,读取文件appsettings.[EnvironmentName].json;

  (3)......

2.1 ConfigureServices中键值读取

  在根目录下文件Startup.cs中ConfigureServices()中采用键值对方式读取:

public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); int appid = Configuration.GetValue<int>("AppID");
var nodes = Configuration.GetSection("Node:Children").Get<IEnumerable<Node>>();
}

2.2 ConfigureServices中使用Options

  添加安装包:Microsoft.Extensions.Options.ConfigurationExtensions

{
"Node": {
"ID": 1,
"Text": "NodeText"
}
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services.AddOptions();
services.Configure<Node>(Configuration.GetSection("Node"));
}

  在控制器中,通过构造函数注入,读取配置。

public class LogController : ControllerBase
{
private Node node;
public LogController(IOptions<Node> option)
{
node = option.Value;
} [HttpGet]
public Node Get()
{
int id = node.ID;
string text = node.Text; return node;
}
}

2.3 读取自定义配置文件

  在项目根目录下,新建配置文件 config.json:

{
"AppID": "10000"
}

  修改Program.js,增加读取config.json文件。

public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
} public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.SetBasePath(Directory.GetCurrentDirectory());
config.AddJsonFile("config.json", optional: true, reloadOnChange: true);
})
.UseStartup<Startup>();
}

  在Startup.cs中调用:

public void ConfigureServices(IServiceCollection services)
{
// 省略其它代码...
string appid = Configuration.GetSection("AppID").Value;
}

2.4 独立类中读取配置

  在.Net Framework中,ConfigurationManager类用于读取配置文件。但在.Net Core中没有该类,新建类ConfigurationManager用于读取配置文件。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks; using System.IO;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options; namespace Libing.Portal.Core.Api.Common.Configs
{
public static class ConfigurationManager
{
public readonly static IConfiguration Configuration; static ConfigurationManager()
{
Configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
} public static T GetSection<T>(string key) where T : class, new()
{
return new ServiceCollection()
.AddOptions()
.Configure<T>(Configuration.GetSection(key))
.BuildServiceProvider()
.GetService<IOptions<T>>()
.Value;
} public static string GetSection(string key)
{
return Configuration.GetValue<string>(key);
}
}
}

ASP.NET Core系列:读取配置文件的更多相关文章

  1. ASP.NET Core开发-读取配置文件Configuration

    ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML ...

  2. ASP.NET Core开发-读取配置文件Configuration appsettings.json

    https://www.cnblogs.com/linezero/p/Configuration.html ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配 ...

  3. asp.net core mvc 读取配置文件appsettings.json

    上一篇我们将了读取自定义配置文件.这篇我们讲一下asp.net core mvc里读取自带的配置文件 appsettings.json 首先创建个asp.net core mvc项目,项目里有Prog ...

  4. NET Core开发-读取配置文件Configuration

    ASP.NET Core开发-读取配置文件Configuration   ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NE ...

  5. 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)

    黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...

  6. 【目录】asp.net core系列篇

    随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...

  7. asp.net core系列 31 EF管理数据库架构--必备知识 反向工程

    一.   反向工程 反向工程是基于数据库架构,生成的实体类和DbContext类代码的过程,对于Visual Studio开发,建议使用PMC.对于其他开发环境,请选择.NET Core CLI工具( ...

  8. asp.net core 系列 22 EF(连接字符串,连接复原,DbContext)

    一.连接字符串 在上二篇中,ASP.NET Core 应用程序连接字符串是写死在ConfigureServices代码中,下面介绍通过配置来实现.连接字符串可以存储在 appsettings.json ...

  9. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  10. asp.net core 系列 17 通用主机 IHostBuilder

    一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...

随机推荐

  1. css横屏问题的设置

    <link rel="stylesheet" media="all and (orientation:portrait)" href="css/ ...

  2. 如何在HTML中设置文本的大小写

    text-transform属性介绍 text-transform属性就是设置HTML页面中的标签里面的文本大小写,text-transform属性常用的属性值有三种:capitalize.upper ...

  3. Linux实现免密码登录

    一.验证ssh远程登录,未作免密处理的两台机器,登录时,是需要输入密码的 二.本地系统执行 ssh-keygen -t rsa 命令,生成密钥文件 三.在相应的目录下查看生成的密钥文件,其中:id_r ...

  4. Linux—各种重要配置文件详解

    一./etc/profile文件详解(环境变量) 添加环境变量 .编辑profile文件 [root@localhost ~]# vi /etc/profile .在profile文件中添加如下内容 ...

  5. Ambari 大数据集群管理

    最近做了一个大数据项目,研究了下集群的搭建,现在将集群搭建整理的资料与大家分享一下!如有疑问可在评论区回复. 1前置配置 Centos7系统,每台系统都有java运行环境 全程使用root用户,避免安 ...

  6. STL ——map、set、unordered_map、unordered_set

    1.map和set map和set底层实现均是红黑树 map支持下标操作,set不支持下标操作. set的迭代器是const的,不允许修改元素的值:map允许修改value,但不允许修改key. se ...

  7. pandas分组统计:groupby,melt,pivot_table,crosstab的用法

    groupby: 分组 melt: 宽表转长表 pivot_table: 长表转宽表,数据透视表 crosstab: 交叉表 / 列联表,主要用于分组频数统计 import numpy as np i ...

  8. 大宗商品交易与风险管理(CTRM)软件产品介绍

    https://mp.weixin.qq.com/s/grA8MhryPfDB2PmBqsao4Q 从全球范围来看,大宗商品行业风险管理领域的主流软件产品是CTRM系列.CTRM是Commodity ...

  9. 开源规则引擎 drools

    java语言开发的开源业务规则引擎 DROOLS(JBOSS RULES )具有一个易于访问企业策略.易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快.效率高.业务分析师或审核人员可以利用 ...

  10. sqlserver deadlock

    当时系统测试的时候,由于使用了自动化测试跑脚本,一下子出了很多sqlserver deadlock的问题. 都处于system test阶段了,哪儿还有时间仔细分析这些死锁是怎么出来的,直接上retr ...