首页 > 其他分享 >NETCORE中如何操作Appsettings.json 文件

NETCORE中如何操作Appsettings.json 文件

时间:2022-10-11 15:48:22浏览次数:52  
标签:GetSection word string NETCORE Appsettings json configuration public

对于很多初学NETCORE的同学来说,怎么从appsettings.json 文件中获取各种类型数据,一直没搞明白。

今天我们就对它的几种数据格式的读取做个说明。

appsettings.json  是我们项目的默认配置文件(我们也可以自定义其他.json文件,加到项目中),其是以json格式进行数据配置的。

那json配置就有多种格式,直接字符串、字符串数组的、对象的、对象数组的。

那都怎么来获取呢

一、字符串

{
  "word": "太阳"
}

第一种读取方法:

直接 _configuration["配置的key"]进行读取,适用于配置本身就是单一的key:value格式。

    public class HomeController : Controller
    {

        private readonly IConfiguration _configuration;
        public HomeController(IConfiguration configuration)
        {
            _configuration = configuration;
        }

        public string Index(string content)
        {
            return _configuration["word"];
           
        }
    }

运行起来,正确显示

第二种方式:

 public string Index(string content)
        {
            return _configuration.GetSection("word").Value;
           
        }

二、字符串数组

 

 

 一般我们读取出来到List当中

{
  "word": [ "太阳" ,"月亮"]
}

第一种方式,采用Bind 方法

public string Index(string content)
        {
            List<string> list = new List<string>();
            _configuration.GetSection("word").Bind(list);
           
            return list.Aggregate(string.Empty,(current,s)=>current+s+",").TrimEnd(',');
        }

第二种方式,采用 Get方法

    public string Index(string content)
        {
           var list= _configuration.GetSection("word").Get<List<string>>();
           
            return list.Aggregate(string.Empty,(current,s)=>current+s+",").TrimEnd(',');
        }

第三种,采用GetChilden方法

    public string Index(string content)
        {
            var list = _configuration.GetSection("word").GetChildren().Select(s => s.Value).ToList();
           
            return list.Aggregate(string.Empty,(current,s)=>current+s+",").TrimEnd(',');
        }

 

三、对象类型

{
  "word": {
    "name": "张三",
    "age": 18
  }
}

第一种方式

多层级的,可采用 GetSection方法的层级1:层级2:层级3等方式逐级获取某个key的值

 public string Index(string content)
        {

            string name = _configuration.GetSection("word:name").Value;
            string age = _configuration.GetSection("word:age").Value;

            return name + age;
        }

 第二种方式,定义一个model实体对象来进行映射

public class Student
    {
        public string Name { get; set; }
        public int Age { get; set;}
    }
     public string Index(string content)
        {
            var stu = new Student();
            _configuration.GetSection("word").Bind(stu);
            return stu.Name + stu.Age;
        }

除了用Bind方法,一样可以用Get方法

   public string Index(string content)
        {
           
          var stu=  _configuration.GetSection("word").Get<Student>();
            return stu.Name + stu.Age;
        }

 

Bind和Get的方法区别在于,一个需要先初始化对象,一个不需要。

但是当配置不存在时,Get方法会报错,Bind方法不会,进返回一个刚初始化的对象。

四、对象数组

对象数组的处理方式,跟对象类型基本一致,只是对象改为数组而已。

这里做1个例子就好

{
  "word": [
    {
      "name": "张三",
      "age": 18
    },
    {
      "name": "李四",
      "age": 19
    }
  ]
       public string Index(string content)
        {
            var stuList = new List<Student>();
            _configuration.GetSection("word").Bind(stuList);
            return stuList.Aggregate(string.Empty, (current, s) => current + s.Name + s.Age + ",").TrimEnd(',');
        }

 

五、新增json配置文件

比如我们在项目的根目录下,新增一个my.json文件,内容如下

{
  "key": "这是新增文件"
}

对于mvc项目,我们需要在Program中把新文件给加入

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((host, config) =>
                   {
                       config.AddJsonFile("my.json",true,true);
                   })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });

主要是增加标红那段的内容。

   public string Index(string content)
        {
            var str= _configuration.GetSection("key").Value;
            return str;
        }

控制器中就可通过_configuration对象正常获取到配置内容了。

对于文件目录,这里要特别说明一下,很多同学没搞清楚

配置的默认目录是当前应用程序的根目录,所以如果我们是在根目录下新增文件,可直接写“my.json”文件名即可。

若文件是在其他文件夹下,可采用这种方式  

config.AddJsonFile("XXX目录/my.json");
注意,不能是写 /开头,那样路径会错误哦

当然,我们也可以更改默认目录,但是不建议,一改,就会影响所有的文件配置

改目录,如下即可:

   .ConfigureAppConfiguration((host, config) =>
                   {
                       config.SetBasePath(Directory.GetCurrentDirectory()+"实际路径");
                       config.AddJsonFile("my.json",true,true);
                   })

再添加之前,通过SetBasePath 配置默认路径。

 

六、在控制台程序中,我们怎么使用 Configution 对象

首先要引入 包:using Microsoft.Extensions.Configuration

 ConfigurationBuilder builder = new ConfigurationBuilder();
            builder.SetBasePath(Directory.GetCurrentDirectory());
            builder.AddJsonFile("appsettings.json",true,true);
            var config = builder.Build();

            Console.WriteLine(config.GetSection("word").Value);
            Console.Read();

如此,就可以直接使用配置对象了

在实际项目中,我们可将其写到一个类中,通过调用实现。

 

标签:GetSection,word,string,NETCORE,Appsettings,json,configuration,public
From: https://www.cnblogs.com/fei686868/p/16779249.html

相关文章

  • workerman/gatewayworker使用protobuffer和json的对比
    作者回答“在websocket上传输json更通用一些,调试也更方便一些。”“快0.00001秒没有什么太大意义。另外最好压测下php的json和protobuffer到底哪个快,php下还真不一定prot......
  • 接口返回JSON字符串压缩和解压
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.IO;usingSystem.IO.Compression;namespaceCSIBrowser.Client.Util{......
  • 对象转JSONObject——字段空值不显示处理办法
    <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.71</version></dependency>importcom.alibaba.fastjson.J......
  • 嵌套Json写入DataTable
    *json中的value的type有时候是个array,DataTable是不能写入这样的json的。但是由于业务需求有时候可能需要将json中的Array也写入DataTable。*解决方案是将DataTable中......
  • AspNetCore中 使用 Grpc 简单Demo
    为什么要用Grpc跨语言进行,调用服务,获取跨服务器调用等目前我的需要使用我的抓取端是go写的查询端用Net6写的导致很多时候我需要把一些临时数据写入到Redis在两......
  • Portability Analyzer (VS framework 升级到.netcore 前的分析工具,看是否可以升级)使用
    PortabilityAnalyzer(VSframework升级到.netcore前的分析工具,看是否可以升级)使用汇总之前的.NETFramework项目准备迁移到ASP.NETCore,考虑到两个平台对一些API还无法......
  • json 格式化输出
    importjsond={"a":"我们","b":"test"}print(json.dumps(d))#{"a":"\u6211\u4eec","b":"test"}print(json.dumps(d,ensure_ascii=False,indent=2))"""{"a......
  • page.json
    uni-app需要给page.json文件需要进行配置路由,否则会不报错,也跳转不过去......
  • vscode settings.json配置项
    安装通用插件1、Prettier-Codeformatter2、Vue3Snippets3、VueLanguageFeatures(Volar)安装项目依赖npminstalleslint-plugin-vue@typescrip......
  • XML和JSON数据格式
    目录​​XML​​​​DTD(文档类型定义)​​​​DTD实体​​​​JSON​​​​使用python解析JSON数据​​​​XML和JSON的区别 ​​​​XML的优缺点​​​​JSON的优缺点​......