在ASP.NET Core 中,应用程序配置数据可以使用JSON, XML 和 INI格式 和内置环境变量,命令行参数或内存中的集合。

  1.如何获取和设置配置

  ASP.NET Core配置系统针对以前的依赖于System.Configuration和XML配置文件(如Web.config)的ASP,NET 版本进行了重构。新的配置模型提供了精简高效的,能够通过检索多样化提供程序来获取基于键/值对配置的能力。应用程序和框架可以通过新的选择模式访问配置。

  可以在ASP.NET Core应用程序中的Startup类中只实例化一个Configuration示例,然后选择模式来访问各自的设置。

  Configuration类是一个提供读写键/值对能力的Providers集合。如果一个键值对写入Configuration,它不会持久,当源再次读写值时将会丢失。因此至少需要配置一个数据源,使得configuration能正常工作。

  下面通过内存配置演示Configuration处理键值对:

    

  内存配置一般用在一次请求中需要暂存数据的情况,例如,如果管道中有多个中间件,可以在某一个中间件中暂存数据,后面的某一个中使用。

  在开发中一般会把配置值放在一个有层次的数据结构中,例如appsettings.json,在这种情况下,可以使用以: 符号分割(从层次结构的根开始)的键读取值:

{
"ConnectionStrings": {
"DefaultConnection": "Data Source=.;Initial Catalog=AccessManagement;Integrated Security=True"
},
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"AllowedHosts": "*",
"MyOptions": {
"Option1": "ww",
"Option2":
}
}

  在应用程序中通过Configuration获取配置的连接字符串,可以通过ConnectionStrings:DefaultConnection读取ConnectionStrings的设置,也可以通过GetConnectionString扩展方法加参数"DefaultConnection"来获取。

    

  应用程序所需要的设置和指定配置的机制都可以通过使用选择模式解耦。创建自己的配置类时,可以是几个不同的类,分别对应不同的配置组,然后通过选项服务注入到应用程序中。这样就可以通过配置或其他所选择的机制来设置了。

  2.使用内置数据源

  开发时并不局限于必须使用单个配置提供程序,可以把多个配置提供程序组合在一起。

  扩展方法支持为配置添加额外的配置文件提供程序。这些方法能被独立的或链式调用在ConfigurationBuilder实例之上:  

    public Startup()
{
var builder = new ConfigurationBuilder();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddJsonFile("appsettings.json");
var config = builder.Build(); var _config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
}

    指定配置提供程序的顺序很重要,这将影响他们的设置被应用的优先级:

public Startup(IConfiguration configuration,IHostingEnvironment env)
{ var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile(“appsettings.json",optional:true,reloadOnChange:true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true); //配置环境变量
builder.AddEnvironmentVariables();
Configuration = builder.Build();
} public IConfiguration Configuration { get; }

  IHostingEnvironment 服务用于获取当前环境。在Development环境中,AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true)将会查找appsettings.Development.json配置文件,并覆盖appsettings.json中存在的值。同样环境变量也会覆盖它们两个的值。

  一旦将指定文件作为配置源,就可以选择当文件发生变化后,是否重新再付这部分的配置,reloadOnChange:true。

  3.使用选项和配置对象

  选择模式可使用自定义的配置类表示一组相关设置。这个配置类需要为配置项提供公开的 属性和一个无参的构造函数。可以根据应用程序的功能分解为多个配置对象。

  下面自定义appsettings.json的配置类,并使用:

  先创建配置类

namespace MVCTest
{
public class AppSettingOptions
{
public DefaultConnec ConnectionStrings { get; set; }
public string AllowedHosts { get; set; }
} public class DefaultConnec
{
public string DefaultConnection { get; set; }
}
}

  在ConfigureServices中调用选项服务:

        public Startup(IConfiguration configuration,IHostingEnvironment env)
{
//Configuration = configuration;
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json",optional:true,reloadOnChange:true)
//.AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true); //配置环境变量
builder.AddEnvironmentVariables();
Configuration = builder.Build();
} public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();//提供依赖注入
services.Configure<AppSettingOptions>(Configuration); //绑定配置选项
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}

    在HomeController中使用:

public class HomeController : Controller
{
private readonly IOptions<AppSettingOptions> _options;
public HomeController(IOptions<AppSettingOptions> options,)
{
_options = options;
}
public static Logger nlog = LogManager.GetCurrentClassLogger();
public IActionResult Index()
{
var AllowedHosts = _options.Value.AllowedHosts;
var DefaultConnection = _options.Value.ConnectionStrings.DefaultConnection;
}
}

    结果:

      

    

  当通过绑定选项来配置选项类型的每一个属性时,实际上是绑定到每一个配置键。配置键是大小写不敏感的。

  当通过调用services.Configure<AppSettingOptions>(Configuration);代码,将一个IConfigureOptions<AppSettingOptions>服务加入服务容器,是为了后面应用程序或框架能通过IOptions<AppSettingOptions>服务来获取配置。若想从其他途径(从数据库通过EF获取)获取配置,可以使用ConfigureOptions<TOptions>扩展方法直接指定经过定制的IConfigureOptions<TOptions>服务。

  其他方法:

//通过代码编写
services.Configure<AppSettingOptions>(options=>
{
options.AllowedHosts = "test";
});
//只配置部分
services.Configure<AppSettingOptions>(Configuration.GetSection("ConnectionStrings"));

ASP.NET Core 配置文件的更多相关文章

  1. asp.net core配置文件

    读取配置文件 asp.net core使用appsettings.json代替传统.net framework的web.config中的<appSettings>节点.它的数据格式变成了j ...

  2. ASP.NET Core 配置文件(无处不在的依赖注入)

    前烟: .NET Core 中取消了以往的 XML 节点配置文件,改用了 *.json 格式. 在 Startup.cs 文件中,构造方法 build appsetting.json 文件, 本文主要 ...

  3. .NET 黑魔法 - asp.net core 配置文件的"对象存储"

    来,全都是干货. 我们都知道在Framework版本的mvc项目中,配置数据是通过web.config里的appSettings节点配置,我们不得不写一些读取配置文件字符串的类,比如保存在静态的变量中 ...

  4. asp.net core 配置文件动态更新

    IOptions<T> //站点启动后,获取到的值永远不变 IOptionsSnapshot<T> //站点启动后,每次获取到的值都是配置文件里的最新值 (reloadOnCh ...

  5. net core体系-web应用程序-4net core2.0大白话带你入门-6asp.net core配置文件

    asp.net core配置文件   读取配置文件 asp.net core使用appsettings.json代替传统.net framework的web.config中的<appSettin ...

  6. 【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 我们在 读取配置文件(一) appsettings.json 中介绍了,如何读取appsettings.json. 但随之产生 ...

  7. 【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 在我们之前的Asp.net mvc 开发中,一提到配置文件,我们不由的想到 web.config 和 app.config,在 ...

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

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

  9. asp.net core轻松入门之MVC中Options读取配置文件

    接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利用Options方法读取配置文件 首先注册MV ...

随机推荐

  1. 阿里云 OSS文件存储挂到云服务器ESC文件系统中

    ossfs能让您在Linux系统中,将对象存储OSS的存储空间(Bucket)挂载到本地文件系统中,您能够像操作本地文件一样操作OSS的对象(Object),实现数据的共享. 使用限制 ossfs使用 ...

  2. CentOS 7 使用Nexus3搭建maven私服

    安装jdk(略) 安装maven wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3. ...

  3. 树莓派初入门(1):SSH远程登录与VNC远程桌面

    前言: 本文主要讲解,对于一个无树莓派显示屏,无键盘,无鼠标,手边只有手机,电脑和一个已烧录好raspbian-stretch系统的树莓派3B+的玩家,如何进行远程登录,进而可以进程桌面的连接. 工具 ...

  4. The 2016 ACM-ICPC Asia China-Final L World Cup(深搜+回溯 暴力求解)

    题目分析: 对于A,B,C,D四支队伍,两两之间进行一场比赛,获胜得3分,平局得1分,失败不得分,现在对给出的四个队伍的得分,判断能否满足得到这种分数,且方案唯一输出yes,不唯一输出no,不可能则输 ...

  5. C++负数类型转换,-1对256取模

    最近在读C++ primer的时候,发现p32上写道:当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数.因此,把-1赋值给8比特大小的unsigned c ...

  6. SparkSQL 中 RDD 、DataFrame 、DataSet 三者的区别与联系

    一.SparkSQL发展: Shark是一个为spark设计的大规模数据仓库系统,它与Hive兼容      Shark建立在Hive的代码基础上,并通过将Hive的部分物理执行计划交换出来(by s ...

  7. Asp.Net微信js分享

    1.准备工作 官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#111 必须是认证过的公众号才 ...

  8. 使用Python3进行AES加密和解密 输入的数据

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

  9. CPU 的由来

    由 c# 的CEF 框架提供的 js 扩展,WebBrowser. JavascriptObjectRepository. 问:为什么要提供这一种方式. 提供了一种 能让js 与后端代码通讯的 方式. ...

  10. 【LG5444】[APIO2019]奇怪装置

    [LG5444][APIO2019]奇怪装置 题面 洛谷 题目大意: 给定\(A,B\),对于\(\forall t\in \mathbb N\),有二元组\((x,y)=((t+\lfloor\fr ...