搜索

查看: 3124|回复: 11

[ASP.NET] 如何使用ASP.NET Core 配置文件

[复制链接]
发表于 2023-5-4 11:31:12 | 显示全部楼层 |阅读模式
Editor 2023-5-4 11:31:12 3124 11 看全部
目录
  • 前言
  • Json配置文件的使用
  • RedisHelper类
  • XML配置文件的使用
    前言
    在ASP.NET ,我们使用XML格式的.Config文件来作为配置文件,而在ASP.NET Core,我们有了更多的选择,可以用回XML,也可以用Json、Ini文件作为配置文件

    Json配置文件的使用
    在创建ASP.NET Core的项目的时候,框架会自动添加appsettings.json文件和添加IConfiguration的注入。
    public Startup(IConfiguration configuration)
    {
           Configuration = configuration;
    }
    当我们在Startup构造函数添加一个IConfiguration参数,框架就会根据注入库来进行注入,除此之外还有IHostingEnvironment,如果在构造函数添加这个参数,框架也会注入对应的实现类

    如果我们想要自己添加Json配置,该怎么做呢?
        //SetBasePath方法用来指定配置文件的所在地,env.ContentRootPath是获取或设置包含应用程序内容文件的目录的绝对路径。
        //AddJsonFile方法是使用JsonConfigurationSource来接收Json文件,并添加到ConfigurationBuilder中的Sources中
        //Build()调用
           var config=new ConfigurationBuilder().SetBasePath(env.ContentRootPath)
                      .AddJsonFile("appsettings.json")
                      .Build();
            Configuration = config;
    如果不通过IHostingEnvironment来获取绝对路径,也可以使用Directory.GetCurrentDirectory()方法来获得

    测试:
    public IActionResult Index()
    {
         var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                     .AddJsonFile("appsettings.json").Build();
         string value = config.GetConnectionString("MySqlConnection");
         
         string value2 = config.GetSection("Test").Value;
         
        return Content($"{value},Test:{value2}");
    }
    public IActionResult Index()
    {
         var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                     .AddJsonFile("appsettings.json").Build();
         string value = config.GetConnectionString("MySqlConnection");
         
         string value2 = config.GetSection("Test").Value;
         
        return Content($"{value},Test:{value2}");
    }

    2022092511242821.png

    2022092511242821.png


    那复杂的键值或者数组,又该如何获得呢?
    {
        "Teacher": {
        "name": "Tom",
        "age": "12",
        "Students": [
          {
            "name": "Docker",
            "age": "13"
          },
          {
            "name": "Nginx",
            "age": "45"
          }
        ]
      }           
    }
    我们想要获取Teacher的name值数组Students第二个的name值,怎么获取呢?
    public IActionResult Index()
    {
       var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json").Build();
       string value = config.GetSection("Teacher:name").Value;
       //
       string value2 = config.GetSection("Teacher:Students:1:name").Value;
      
       return Content($"{value},Test:{value2}");
       
    }

    2022092511242822.png

    2022092511242822.png


    PS:从Teacher:name和Teacher:Students:1:name这两个中可以寻找规律,当然获取方式不止这一种,还可以使用Config[“Teacher:Students:1:name”]来获取

    如果我们想用对象来存储配置文件的键值该如何做呢?
    //appsetting.json
    {
       "RedisConfig": {
        "host": "127.0.0.1",
        "MasterPort": "6379",
        "SlavePort": "6380",
        "PassWord": "wen123"
       }
    }
    RedisHelper类
    public class RedisHelper:IRedis
    {
       public string host { get; set; }
       
       public string MasterPort { get; set; }
       
       public string SlavePort { get; set; }
       
       public string PassWord { get; set; }
       
    }
    public IActionResult Index()
    {
        var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                     .AddJsonFile("appsettings.json").Build();
        //创建一个自带的IOC容器
        var collection = new ServiceCollection();
                collection.AddOptions().Configure(config.GetSection("RedisConfig"));
        RedisHelper redishelper = collection.BuildServiceProvider().GetService[I]>().Value;
       
        return Content($"host:{redishelper.host},MasterPort:{redishelper.MasterPort}");
    }

    2022092511242823.png

    2022092511242823.png


    还有另一种写法:在Startup类的ConfigureServices方法里面,向services添加代码,通过构造函数来构造RedisHelper类
    services.AddOptions().Configure(Configuration.GetSection("RedisConfig"));
    private RedisHelper _redis;
    public HomeController(IOptions options)
    {
           _redis = options.Value;
    }
    public IActionResult Index()
    {
         return Content($"host:{_redis.host},MasterPort:{_redis.MasterPort}");
    }

    2022092511242924.png

    2022092511242924.png


    XML配置文件的使用
    这里简单记录一下,提取配置文件的值大致与上面做法没有太大的区别,在构造IConfiguration的时候把AddJsonFile改成AddXmlFile就行了
    //XMLDemo文件

      sdfl
      
        sdfasdf
        sdfdsafsfs
      
      
       
          dfgfdg
       
      
    public IActionResult Index()
    {
         var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory())
                      .AddXmlFile("XMLDemo.xml").Build();
         var value = config.GetSection("mysqlConnectionStrings").Value;
         var value2 = config.GetSection("test:connection2").Value;
         return Content($"value:{value},value2:{value2}");

    2022092511242925.png

    2022092511242925.png


    到此这篇关于如何使用ASP.NET Core 配置文件的文章就介绍到这了,更多相关ASP.NET Core 配置文件内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 14:41:46 | 显示全部楼层
    123456848 2023-6-29 14:41:46 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-29 17:53:22 | 显示全部楼层
    462710480 2023-6-29 17:53:22 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-29 18:11:37 | 显示全部楼层
    永远爱你冰塘 2023-6-29 18:11:37 看全部
    楼主,我太崇拜你了!我想我是一天也不能离开知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-29 21:14:03 | 显示全部楼层
    心随674 2023-6-29 21:14:03 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 03:48:29 | 显示全部楼层
    ffycxyw2274436 2023-6-30 03:48:29 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-7-3 08:40:40 | 显示全部楼层
    米老鼠和蓝精鼠v 2023-7-3 08:40:40 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-7-4 12:04:51 | 显示全部楼层
    我的苦恼冉 2023-7-4 12:04:51 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-7-6 14:16:51 | 显示全部楼层
    惜颜705 2023-7-6 14:16:51 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-7-6 16:56:44 | 显示全部楼层
    123456833 2023-7-6 16:56:44 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表