ASP.NET Core配置文件的获取和设置

在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": 3
  }
}

在应用程序中通过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配置文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • asp.net core配置文件加载过程的深入了解

    前言 配置文件中程序运行中,担当着不可或缺的角色:通常情况下,使用 visual studio 进行创建项目过程中,项目配置文件会自动生成在项目根目录下,如 appsettings.json,或者是被大家广泛使用的 appsettings.{env.EnvironmentName}.json:配置文件 作为一个入口,可以让我们在不更新代码的情况,对程序进行干预和调整,那么对其加载过程的全面了解就显得非常必要. 何时加载了默认的配置文件 在 Program.cs 文件中,查看以下代码 public

  • ASP.NET Core根据环境变量支持多个 appsettings.json配置文件

    一.背景 在项目开发的过程当中,开发环境与生产环境的配置肯定是不一样的.拿个最简单的例子来说,比如连接字符串这种东西,开发环境肯定不能连生产数据库.在之前的话,这种情况基本靠准备两个同名的配置文件来进行处理,然后你在本地就使用本地的配置文件,生产环境就使用生产环境的配置文件,十分麻烦. ASP.NET Core支持利用环境变量来动态配置 JSON 文件,下面就来看一下如何在项目中使用这样功能吧. 二.准备工作 ASP.NET Core在应用启动时读取环境变量ASPNETCORE_ENVIRONM

  • Asp.net Core与类库读取配置文件信息的方法

    前言 首先开一个脑洞,Asp.net core 被使用这么长时间了,但是关于配置文件(json)的读取,微软官方似乎并没有给出像.net framework读取web.config那样简单且完美.严重怀疑这是微软为了促进.net core 生态繁荣搞的一点小手段. appsetting.Development.json (appsetting.json的内容和这个差不多,下面会讲到多环境使用) { "SettingPath": { "VideoFilePath":

  • ASP.NET Core读取配置文件

    ASP.NET Core 中,可以使用 ConfigurationBuilder 对象来构建. 主要分为三部:配置数据源 -> ConfigurationBuilder -> 使用. 数据源可来自字典或配置文件. 数据源要么继承 IConfigurationSource ,要么从配置文件中读取. 1,来自字典 我们先使用字典存储键值对,来设置配置, test = 配置,然后使用 ConfigurationBuilder.Add() 方法添加数据源, Add 方法可以添加继承了 IConfigu

  • Asp.Net Core轻松学习系列之配置文件

    前言 在 .NET Core 项目中,配置文件有着举足轻重的地位:与.NetFramework 不同的是,.NET Core 的配置文件都以 .json 结尾,这表示一个标准的 json 格式的文件:一个标准的 Asp.Net Core MVC 项目,一定带着一个 appsettings.json 文件,该文件便是项目默认配置文件,这和基于 .NetFramework 创建的 Asp.Net Web Application (默认配置名称:App.config) 有着根本的不同,今天我们就学习如

  • 详解ASP.NET Core 在 JSON 文件中配置依赖注入

    前言 在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入. 在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac.Untiy.String.Net 等,这些第三放依赖注入组件基本上都提供了一套配置注入或者配置生命周期的方式,除了直接配置到类里面之外,还提供了要么使用 xml 文件,要么使用 json 等,那么在新的

  • ASP.NET Core应用程序配置文件AppSetting.json

    AppSetting.json 当我们使用空项目模板或Razor页面或MVC模板或Web API模板创建ASP.NET Core Web应用程序时,Visual Studio会自动为我们创建appsettings.json文件,如下图所示. appsettings.json文件是一个应用程序配置文件,用于存储配置设置,例如数据库连接字符串,任何应用程序范围的全局变量等.如果打开ASP.NET Core appsettings.json文件,则默认情况下会看到以下代码 这是由Visual Stud

  • ASP.NET core Web中使用appsettings.json配置文件的方法

    前言 最近在研究把asp.net程序移植到linux上,正好.net core出来了,就进行了学习. 移植代码基本顺利,但是发现.net core中没有ConfigurationManager,无法读写配置文件,单独写个xml之类的嫌麻烦,就谷歌了下,发现了个方法,遂记录如下,方便以后查找: 方法如下 配置文件结构 public class DemoSettings { public string MainDomain { get; set; } public string SiteName {

  • ASP.NET CORE读取json格式配置文件

    目录 一.在Startup类中读取json配置文件 1.使用Configuration直接读取 2.使用IOptions接口 1.定义实体类 2.修改json文件 3.在StartUp类里面配置 3.读取自定义json文件 实例化类 添加方式1 添加方式2 二.在类库中读取json文件 在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的

  • 如何在ASP.NET Core类库项目中读取配置文件详解

    前言 最近有朋友问如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇文章的出现,正常来讲我们在应用程序目录下有个appsettings.json文件对于相关配置都会放在这个json文件中,但是要是我建立一个类库项目,对于一些配置比如密钥或者其他需要硬编码的数据放在JSON文件中,在.net core之前配置文件为web.config并且有相关的类来读取节点上的数据,现如今在.net core中为json文件,那么我们该如何做?本

  • ASP.NET Core中修改配置文件后自动加载新配置的方法详解

    前言 在 ASP.NET Core 默认的应用程序模板中, 配置文件的处理如下面的代码所示: config.AddJsonFile( path: "appsettings.json", optional: true, reloadOnChange: true ); config.AddJsonFile( path: $"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: t

随机推荐