专栏首页me的随笔.NET Core 读取配置文件

.NET Core 读取配置文件

前面写过一篇《.NET Core类库中读取配置文件》 ,当时对于.NET Core读取配置文件了解有限,这里做下补充:

配置文件内容如下:

{
  "url": "homeinns.com",
  "person": {
    "name": "xfh",
    "age": 26
  }
}

引用Microsoft.Extensions.Configuration.Json

using System;
using System.Configuration;
using System.IO;
using Microsoft.Extensions.Configuration;


namespace coreapp
{
    class Program
    {
        /// <summary>
        /// 加载配置文件,构建IConfigurationRoot
        /// </summary>
        private static readonly IConfigurationBuilder ConfigurationBuilder = new ConfigurationBuilder();

        /// <summary>
        /// 获取配置文件中的内容,继承自IConfiguration
        /// </summary>
        private static IConfigurationRoot _configuration;

        static void Main(string[] args)
        {
            _configuration = ConfigurationBuilder
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(cfg =>
                {
                    cfg.Path = "config.json";
                    cfg.ReloadOnChange = true;
                    cfg.Optional = false;
                })
                //Build方法的调用要在AddJsonFile之后,否则生成的IConfigurationRoot实例的
                //Providers属性不包含任何元素而导致无法读取文件中的信息
                .Build();

            var url = _configuration.GetSection("url");
            //读取json对象,在IConfiguration中,配置文件中的key都是扁平化的
            var pAge = _configuration["person:age"];

           //遍历配置文件中的所有元素
            foreach (var keyValuePair in _configuration.AsEnumerable())
            {
                Console.WriteLine($"{keyValuePair.Key} - {keyValuePair.Value}");
            }

        }
    }
}

还可以将文件内容映射到对象上,需额外引用Microsoft.Extensions.Configuration.Binder包:

class ConfigModel
{
    public string Url { set; get; }
    public Person Person { set; get; }
}
public class Person
{
    public string Name { set; get; }
    public int Age { set; get; }
}

var configModel = new ConfigModel();
ConfigurationBuilder.Build().Bind(configModel);

在ASP.NET Core中,还可以使用IOptions<T>来获取配置信息,但当配置文件被修改时,IOptions<T>中的内容并不会发生改变。

public IConfigurationRoot Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ConfigModel>(Configuration);
}

//然后通过IoC获取IOptions<T>
public void Method(IOptions<ConfigModel> opt)
{

}

以上,是对json文件的操作,接下来操作xml文件。


若要像在.NET Framework中那样读取读取App.configWeb.config,引入System.Configuration.ConfigurationManager包即可:

var value = ConfigurationManager.AppSettings["key"];
Console.WriteLine(value);
Console.WriteLine(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);

或者,引用Microsoft.Extensions.Configuration.Xml包,

_configuration = ConfigurationBuilder
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddXmlFile("App.config")
    .Build();
//不如使用ConfigurationManager方便了,在appSettings节点下添加多个key还会导致读取时抛异常
var value = _configuration.GetSection("appSettings:add:value").Value;

推荐阅读

用ASP.NET Core 2.0 建立规范的 REST API -- 预备知识 (2) + 准备项目

版权声明

本文为作者原创,版权归作者雪飞鸿所有。 转载必须保留文章的完整性,且在页面明显位置处标明原文链接。

如有问题, 请发送邮件和作者联系。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ASP.NET Core中使用Graylog记录日志

    通常POST请求数据都在请求体中,ASP.NET Core中HttpRequest类型的Body属性是HttpRequestStream类型,该类型源码在Git...

    雪飞鸿
  • ASP.NET MVC5中View-Controller间数据的传递

    使用ASP.NET MVC做开发时,经常需要在页面(View)和控制器(Controller)之间传递数据,那么都有哪些数据传递的方式呢?

    雪飞鸿
  • ASP.NET Core Middleware

    中间件(Middleware)是ASP.NET Core中的一个重要特性。**所谓中间件就是嵌入到应用管道中用于处理请求和响应的一段代码**。ASP.NET C...

    雪飞鸿
  • ASP.NET Core 使用 JWT 自定义角色/策略授权需要实现的接口

    可以把授权访问的 API 存放到 Token 中,Token 也可以只存放角色信息和用户身份信息。

    痴者工良
  • ASP.NET CORE Linux发布工具(文件对比 只上传差异文件;自动启停WebServer命令;上传完成自动预热WebServer)

    liulun
  • javascript基础知识点1.0

    知识点综述: ---- 在复习JavaScript语法,主要看的是w3cschool的教程。 用法: 1.0必须位于<script></s...

    东风冷雪
  • 在Ocelot中使用自定义的中间件(二)

    在上文中《在Ocelot中使用自定义的中间件(一)》,我介绍了如何在Ocelot中使用自定义的中间件来修改下游服务的response body。今天,我们再扩展...

    李明成
  • ASP.NET MVC编程——单元测试

    1自动化测试基本概念 自动化测试分为:单元测试,集成测试,验收测试。 单元测试 检验被测单元的功能,被测单元一般为低级别的组件,如一个类或类方法。 单元测试要满...

    甜橙很酸
  • 用SignalR 2.0开发客服系统[系列2:实现聊天室]

    前言 交流群:195866844 上周发表了 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 这篇文章,得到了很多帮助和鼓励,小弟在此真心的感谢大...

    GuZhenYin
  • NewLife.Net——网络压测单机2266万tps

    NewLife.Net压力测试,峰值4.2Gbps,50万pps,消息大小24字节,消息处理速度2266万tps!

    大石头

扫码关注云+社区

领取腾讯云代金券