ASP.NET Core系列:读取配置文件
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系列:读取配置文件的更多相关文章
- ASP.NET Core开发-读取配置文件Configuration
ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NET有所不同了,之前是依赖于System.Configuration和XML ...
- ASP.NET Core开发-读取配置文件Configuration appsettings.json
https://www.cnblogs.com/linezero/p/Configuration.html ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配 ...
- asp.net core mvc 读取配置文件appsettings.json
上一篇我们将了读取自定义配置文件.这篇我们讲一下asp.net core mvc里读取自带的配置文件 appsettings.json 首先创建个asp.net core mvc项目,项目里有Prog ...
- NET Core开发-读取配置文件Configuration
ASP.NET Core开发-读取配置文件Configuration ASP.NET Core 是如何读取配置文件,今天我们来学习. ASP.NET Core的配置系统已经和之前版本的ASP.NE ...
- 技术的正宗与野路子 c#, AOP动态代理实现动态权限控制(一) 探索基于.NET下实现一句话木马之asmx篇 asp.net core 系列 9 环境(Development、Staging 、Production)
黄衫女子的武功似乎与周芷若乃是一路,飘忽灵动,变幻无方,但举手抬足之间却是正而不邪,如说周芷若形似鬼魅,那黄衫女子便是态拟神仙. 这段描写出自<倚天屠龙记>第三十八回. “九阴神抓”本是& ...
- 【目录】asp.net core系列篇
随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...
- asp.net core系列 31 EF管理数据库架构--必备知识 反向工程
一. 反向工程 反向工程是基于数据库架构,生成的实体类和DbContext类代码的过程,对于Visual Studio开发,建议使用PMC.对于其他开发环境,请选择.NET Core CLI工具( ...
- asp.net core 系列 22 EF(连接字符串,连接复原,DbContext)
一.连接字符串 在上二篇中,ASP.NET Core 应用程序连接字符串是写死在ConfigureServices代码中,下面介绍通过配置来实现.连接字符串可以存储在 appsettings.json ...
- asp.net core 系列 18 web服务器实现
一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...
- asp.net core 系列 17 通用主机 IHostBuilder
一.概述 ASP.NET Core 通用主机 (HostBuilder),该主机对于托管不处理 HTTP 请求的应用非常有用.通用主机的目标是将 HTTP 管道从 Web 主机 API 中分离出来,从 ...
随机推荐
- 【JavaScript】使用document.write输出覆盖HTML问题
您只能在 HTML 输出中使用 document.write.如果您在文档加载后使用该方法,会覆盖整个文档. 分析 HTML输出流是指当前数据形式是HTML格式的数据,这部分数据正在被导出.传输或显示 ...
- apache jmeter 使用
======================= 插件 ======================= 在JMeter 中很多东西都是基于插件技术的, 所以扩展性非常好, 比如下面这些东西都是插件: 1 ...
- 安装quickLook插件以及解决如何不能读取offic问题
目录 @(安装quickLook插件) quickLook插件是Mac上的快速浏览的一个功能,现在win10系统上也能安装插件,这个插件可以快速浏览txt,doc,图片,表格等文件如下图: 我认为最方 ...
- MongoDB 副本集丢失数据的测试
在MongoDB副本集的测试中发现了一个丢数据的案例. 1. 概要描述 测试场景为:一主一从一验证 测试案例 step1 :关闭从副本: step 2 :向主副本中插入那条数据: step 3 :关闭 ...
- stl标准库 iterator_traits
为什么标准库里要有traits? 我们先回忆一下,标准库提供的算法的一些特征: 参数一般包括iterator. 要根据iterator的种类,和iterator包装的元素的类型等信息,来决定使用最优化 ...
- Incorrect datetime value: '' for column 'examDate' at row 1
出问题的程序:user.setCreateTime(new Date()); 控制台图片一张,问题是:Incorrect datetime value: '' for column 'createTi ...
- 6.GC垃圾回收算法和垃圾收集器的关系
JAVAGC垃圾回收机制和常见垃圾回收算法 推荐博客:JVM垃圾回收机制和常见垃圾回收算法 JVM的内存结构.垃圾回收算法
- 初识 RESTful API规范
简介 一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. rest是一种 ...
- centos7下关闭防火墙
查看防火墙:systemctl status firewalld.service 关闭防火墙:systemctl stop firewalld.service 以上方式是暂时的,重启系统则防火墙仍然开 ...
- 2、zabbix3.4的安装
系统版本:centos7 数据库版本:mysql二进制安装5.7 zabbix:阿里云安装3.4 一.Zabbix的安装 Zabbix3.4版本官方安装手册链接:https://www.zabbix. ...