《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项
1.配置文件的相关闲话
Core自身对于配置文件不是必须品,但由上文分析可知ASP.NET Core默认采用appsettings.json作为配置文件,关于配置信息的优先等级
命令行>环境变量>自我订制的配置(AddUserSecrets)>和当前环境相匹配的appsettings.json中的配置>大于appsettings.json中的配置
关于AddUserSecrets是什么这里简单一言以蔽之:每个开发人员有自己特性的配置数据,这些配置信息仅仅属于个人,不能提交给团队成员,
但是又不想不团队共有的配置所影响. 剩下的自行去了解,关键是上面的优先级
和当前环境相匹配的appsettings.json如appsettings.Development.json
2.日志配置的问题
系统默认采用Microsoft.Extensions.Logging系列套餐作为默认的日志组件,且采用配置文件中的Logging节点作为日志的默认配置参数依据。如下图所示:

日志的优先等级如下(从上到下依次递增)
public enum LogLevel
{
// 含有最详细的日志数据,其中可能含有程序的一些敏感数据,该选项默认是被禁用的,且生产环境中绝对不要开启
// (太多,太敏感),之所以默认禁用在于appsettings.json中最低级别是Information
Trace = 0,
//调试用的一些数据
Debug = 1,
// 用于跟踪程序通常的流程数据,这些日志是一些长期的数据。
Information = 2,
// 需要引起重视的日志数据,不会导致程序崩溃
Warning = 3,
//发生了错误,但不会导致程序大范围崩溃
Error = 4,
// 严重且致命的错误
Critical = 5,
// 不是用来记录日志的. 通常用于设置默认值
None = 6
}
3.配置文件的读取
1)ASP.NET Core的Host采用appsettings.json作为配置文件,具体的值是多少受优先级的影响(看第一段)
2)Startup类中Host自动通过构造注入的方式提供了Configuration的值,Configuration读取方式介绍如下
ASP.NET Core中默认采用了Microsoft.Extensions.Configuration.Json作为配置解析器(publish一下就看到了里面有它)
{
  "Id": "123",
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "UserList": [
    {
      "Name": "Name1"
    },
    {
      "Name": "Name2"
    },
    {
      "Name": "Name3"
    }
  ]
}
3.通过Key进行读取
Configuration["Id"]; // 123
Configuration["Logging:IncludeScopes"]; // false
Configuration["Logging:LogLevel:Default"]; // Debug
Configuration["UserList:0:Name"]; // Name1
上面这些值都是string类型的,我们可以通过GetValue来获取指定类型的值

如下
Configuration.GetValue<int>("Id"); // int类型的123
Configuration.GetValue<bool>("Logging:IncludeScopes"); // bool 类型 false
Configuration.GetValue<string>("Logging:LogLevel:Default"); // string 类型 Debug
Configuration.GetValue<string>("UserList:0:Name"); // string 类型 Name1
4.通过POCO(纯C#对象)类来获取配置信息(这里以Get方法为例)
public class Poco
{
public int Id { get; set; }
public LoggingPoco Logging { get; set; }
public List<User> UserList { get; set; }
public class User
{
public string Name { get; set; }
}
}
public class LoggingPoco
{
public bool IncludeScopes { get; set; }
public LogLevelPoco LogLevel { get; set; }
}
public class LogLevelPoco
{
public string Default { get; set; }
public string System { get; set; }
public string Microsoft { get; set; }
}
var detailLogging = Configuration.GetSection("Logging").Get<LoggingPoco>();
获取整个配置文件的配置信息
var allConfig = Configuration.Get<Poco>();
获取指定节点下的配置内容
var logging = Configuration.GetSection("Logging").Get<LoggingPoco>();
说说优先级最高的配置(命令行方式)
前文所述,命令行具有优先级最高的配置权力,命令行传入A的值的方式:
//core特有的传入方式,没有引号就会因空格截断 dotnet app.dll /A="Value in CMD" //传统的方式,没有引号就会因空格截断
dotnet app.dll --A "Value in CMD"
dotnet app.dll A="Value in CMD"

环境变量的传值方式
环境变量的等级仅次于命令行,另外windows当前用户的环境变量有限等级高于系统环境变量,windows环境变量可能重启后才能生效;
主要的应用场景在于docker等
内存性配置方式
主要用于加密保护一些敏感配置数据.
《ASP.NET Core 高性能系列》关于.NET Core的配置信息的若干事项的更多相关文章
- 《ASP.NET Core 高性能系列》致敬伟大的.NET斗士甲骨文!
		写在开始 三年前,曾写过一篇文章:从.NET和Java之争谈IT这个行业,当时遭到某些自认为懂得java就了不起的Javaer抨击, 现在可以致敬伟大的.NET斗士甲骨文了 (JDK8以上都需要收费, ... 
- 《ASP.NET Core 高性能系列》关于.NET Core的部署方式
		概述,.NET Core应用程序可以创建三种类型的部署:FDD SCD FDE 框架依赖的部署(FDD).顾名思义,框架依赖的部署(FDD)依赖于目标系统上是否存在.NET Core版本.由于.NET ... 
- 《ASP.NET Core 高性能系列》ASP.NET Core的启动过程(1)
		一.一切从头开始 简述:知道事情的真相就应该从头 开始,下面我们代码先行 public class Program { public static void Main(string[] args) { ... 
- Asp.net Core Startup Class中是如何获取配置信息的
		默认的网站构建方式 VS2015新建asp.net core项目,项目建立完成后,有两个文件,Program.cs和Startup.cs. public class Program { public ... 
- 【.Net Core 学习系列】-- EF Core 实践(Code First)
		一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二解决方案: 新建项目: File --> New --> Project --> ... 
- 【.Net Core 学习系列】-- EF Core实践(DB First)
		一.开发环境: VS2015, .Net Core 1.0.0-preview2-003156 二.准备数据: CREATE DATABASE [Blogging]; GO USE [Blogging ... 
- 《ASP.NET Core 高性能系列》静态文件中间件
		一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP ... 
- 《ASP.NET Core 高性能系列》环境(EnvironmentName)的设置
		一.概述 程序启动时Host捕获到环境相关数据,然后交由IEnvironment(传说要作废,但是觉得这个有设计点问题,因为.NET Core 非Web怎么处理?),然后交由IWebHostEnvir ... 
- 《ASP.NET Core 高性能系列》关于性能的闲聊
		一.通常的性能问题类型 让我们一起看看那些公共的性能问题,看看他们是或者不是.我们将了解到为什么我们常常在开发期间会错过这些问题.我们也会看看当我们考虑性能时语言的选择.延迟.带宽.计算等因素. 二. ... 
随机推荐
- C++引用计数设计与分析(解决垃圾回收问题)
			1.引言 上一篇博文讲到https://www.cnblogs.com/zhaoyixiang/p/12116203.html 我们了解到我们在浅拷贝时对带指针的对象进行拷贝会出现内存泄漏,那C++是 ... 
- Java8 Date API
			一 .Clock 时钟 Clock类提供了访问当前日期和时间的方法,Clock是时区敏感的,可以用来取代 System.currentTimeMillis() 来获取当前的微秒数.某一个特定的时间点也 ... 
- 0007 表单标签(form、select)
			目标: 能写出最常用的注册类表单 能说出input表单常见属性 现实中的表单,类似我们去银行办理信用卡填写的单子. 如下图 作用: 表单目的是为了收集用户信息. 在我们网页中, 我们也需要跟用户进行交 ... 
- Oracle 11g静默安装
			1.检查安装包 安装依赖包 yum -y install gcc make binutils gcc-c++ compat-libstdc++-33 elfutils-libelf-devel elf ... 
- DEVOPS技术实践_16:使用Centos容器作为salve的报错offline的问题
			上一篇创建了一个centos的容器,而且已经安装了openssh [root@node6 ~]# docker ps -a f2320c5d3c54 centos minutes ago Exited ... 
- Python学习(二)语言基础
			一.变量与类型 在程序设计中,变量是一种存储数据的载体 整型:Python中可以处理任意大小的整数 浮点型:浮点数也就是小数 字符串型:字符串是以单引号或双引号括起来的任意文本 布尔型:布尔值只有Tr ... 
- Python 多态与抽象类
			一.多态 1.1 什么是多态 多态也称"多态性",指的是同一种类型的事物,不同的形态. 在python中的多态指的是让多种类若具备类似的数据属性与方法属性,都统一好命名规范,这样可 ... 
- Python第二天了哇
			在Python中input是接收用户输入的一个函数哇 a = int( b) 这个的意思是把b的值转换为整型? 好像是这个亚子 Python想要知道它的内置函数的话可以在Python的交互界面(She ... 
- 兄弟们,你们天天吊打面试官,面试官很难受啊。 metasploit免S客户端
			metasploit生成的exe文件很小,但是免杀效果不行, 找了很多资料, 只有生成c语言shellcode,然后c#重新编译, 这种免杀效果,挺让人满意的 首先需要生成客户端,客户端使用了ngro ... 
- owa部署
			新建一台win server 2012(注意如果是2008要补丁) 配置静态ip DNS指向ad域的ip 测试: ping 下ad域的域名,是通的继续 把本机加入到ad域 重启下 用admin登陆: ... 
