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. kali linux maltego-情报收集工具

    Maltego是一个交互式数据挖掘工具,它为链接分析呈现有向图.该工具用于在线调查,以发现互联网上各种来源的信息片段之间的关系. 注册Maltego账号,注册地址:https://www.paterv ...

  2. NetCoreAPI添加Swagger

    public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; ...

  3. 用linux编译并运行c文件

    目录 创建一个.c文件 写完代码以后进行编译 @(用linux编译并运行c文件) 创建一个.c文件 vi 文件名.c 对于图形化的linux,需要右键桌面,在终端中打开,输入vi 文件名.c就创建了一 ...

  4. Linux:挂载磁盘分区

    查看挂载的分区 df 命令主要用来了解系统中已经挂载的各个文件系统的磁盘使用情况. 常用选项: "-h" ,显示更易读的容量单位: "-T" ,显示文件系统的类 ...

  5. requests---发送post请求完成登录

    前段时间写过一个通过cookies完成登录,今天我们写一篇通过post发送请求完成登录豆瓣网 模拟登录 1.首先找到豆瓣网的登录接口 打开豆瓣网站的登录接口,请求错误的账号密码,通过F12或者抓包工具 ...

  6. springmvc+strut2比较

    常见web框架中Struts2和SpringMVC独占鳌头,SpringMVC和Struts有什么不同? 我们可以从各个方面进行对比: 一:框架的思想设计上 SpringMVC控制器是基于方法上拦截, ...

  7. 浅谈JS函数防抖及应用场景

    [前言] 在工作中,我们可能碰到这样的问题: 用户在搜索的时候,在不停敲字,如果每敲一个字我们就要调一次接口,接口调用太频繁,给卡住了. 用户在阅读文章的时候,我们需要监听用户滚动到了哪个标题,但是每 ...

  8. 2016年蓝桥杯B组C/C++决赛题解

    2016年第七届蓝桥杯B组C/C++决赛题解 2016年蓝桥杯B组C/C++决赛题目(不含答案) 1.一步之遥 枚举解方程,或者套模板解线性方程 #include<bits/stdc++.h&g ...

  9. monkey和monkeyrunner的区别

    简单来说: 1.monkey是在设备或模拟器直接运行adb shell命令生成随机事件来进行测试 2.monkeyrunner是通过API发送特定的命令和事件来控制设备 为了支持黑盒自动化测试的场景, ...

  10. 开发JQuery插件标准结构

    1. 定义作用域 定义一个JQuery插件,首先要把这个插件的代码放在一个不受外界干扰的地方.如果用专业些的话来说就是要为这个插件定义私有作用域.外部的代码不能直接访问插件内部的代码.插件内部的代码不 ...