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. Dynamics CRM中的注释(Note)及RollupRequest消息初探

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复161或者20151015可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 注释,这个实体的架构名称是Ann ...

  2. 真机调试(A valid provisioning profile for this executable was not found.)

    这个问题是因为provisioning的问题,因为真机没有加入到账号下面的原因 解决步骤 1.吧identifier复制然后再平开开发中心 2.点击+号添加设备保存 3.在develope中选中保存即 ...

  3. ABP进阶教程1 - 条件查询

    点这里进入ABP进阶教程目录 添加实体 打开领域层(即JD.CRS.Core)的Entitys目录 //用以存放实体对象添加一个枚举StatusCode.cs //状态信息 using System; ...

  4. [b0022] python 归纳 (八)_多进程_基本使用

    # -*- coding: UTF-8 -*- """ 测试进程使用 multiprocessing.Process 使用: 1. 准备一个函数<fun>,子 ...

  5. CodeForces - 1253D(并查集)

    题意 https://vjudge.net/problem/CodeForces-1253D 一个无向图,对于任意l,r,如果l到r有路径,那么l到m也有路径(l<m<r),问最少加多少条 ...

  6. ts开发环境搭建

    ts为typescript的缩写,是javascript的超集. npm源改为国内 由于 Node 的官方模块仓库网速太慢,模块仓库需要切换到阿里的源. npm config set registry ...

  7. webstorm的git操作使用

    0. 前言 在上一篇文章中,讲述了使用webstorm去调试node程序,最近研究了一下如何使用webstorm去操作git. 对于git的使用,大家的使用方式均有不同,最王道的方式非命令行莫属,基于 ...

  8. Oracle SQL日期及日期格式获取命令

    日期及日期格式: 获取系统日期: sysdate() 格式化日期 to_char(sysdate(),'yyyy-mm-dd,hh24:mi:ss') to_date(sysdate(),'yyyy- ...

  9. 单臂路由和VLAN-IF

    前几日有同学在韩老师的会员群里面提了这样一个问题: 有个问题搞半天没弄明白,我在核心交换机上划分了几个vlan,其中一个端口与防火墙相连,防火墙配置为192.168.100.1/30,核心交换机上连接 ...

  10. shell的几个实战脚本例子(欠)

    如何让shell实现 可选择性执行 的功能 巡检内存使用率 批量创建用户 场景:公司想要做测试,需要10000个用户 数据库里查询学生成绩 #如何登录mysql数据库 #如何写sql对数据进行操作 # ...