当前位置: 代码网 > it编程>编程语言>Asp.net > ASP.NET CORE读取json格式配置文件

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

2024年05月18日 Asp.net 我要评论
在.net framework中,配置文件一般采用的是xml格式的,.net framework提供了专门的configurationmanager来读取配置文件的内容,.net core中推荐使用j

在.net framework中,配置文件一般采用的是xml格式的,.net framework提供了专门的configurationmanager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?

一、在startup类中读取json配置文件

1、使用configuration直接读取

看下面的代码:

public iconfiguration configuration { get; }

configuration属性就是.net core中提供的用来读取json文件。例如:

public void configure(iapplicationbuilder app, ihostingenvironment env)
{

            string option1 = $"option1 = {this.configuration["option1"]}";
            string option2 = $"option2 = {this.configuration["option2"]}";
            string suboption1 = $"suboption1 = {this.configuration["subsection:suboption1"]}";
            // 读取数组
            string name1 = $"name={this.configuration["student:0:name"]} ";
            string age1 = $"age= {this.configuration["student:0:age"]}";
            string name2 = $"name={this.configuration["student:1:name"]}";
            string age2 = $"age= {this.configuration["student:1:age"]}";
            // 输出
            app.run(c => c.response.writeasync(option1+"\r\n"+option2+ "\r\n"+suboption1+ "\r\n"+name1+ "\r\n"+age1+ "\r\n"+name2+ "\r\n"+age2));
            if (env.isdevelopment())
            {
                app.usedeveloperexceptionpage();
            }
            else
            {
                app.usehsts();
            }

            app.usehttpsredirection();
            app.usemvc();
}

结果:

2、使用ioptions接口

1、定义实体类

public class mongodbhostoptions
{
        /// <summary>
        /// 连接字符串
        /// </summary>
        public string connection { get; set; }
        /// <summary>
        /// 库
        /// </summary>
        public string database { get; set; }

        public string table { get; set; }
}

2、修改json文件

在appsettings.json文件中添加mongodbhost节点:

{
  "logging": {
    "loglevel": {
      "default": "warning"
    }
  },
  "option1": "value1_from_json",
  "option2": 2,
  "subsection": {
    "suboption1": "subvalue1_from_json"
  },
  "student": [
    {
      "name": "gandalf",
      "age": "1000"
    },
    {
      "name": "harry",
      "age": "17"
    }
  ],
  "allowedhosts": "*",
  //mongodb
  "mongodbhost": {
    "connection": "mongodb://127.0.0.1:27017",
    "database": "templatedb",
    "table": "cdatemplateinfo"
  }
}

注意:

mongodbhost里面的属性名必须要和定义的实体类里面的属性名称一致。

3、在startup类里面配置

添加optionconfigure方法绑定

private void optionconfigure(iservicecollection services)
{
      //mongodbhost信息
      services.configure<mongodbhostoptions>(configuration.getsection("mongodbhost"));
}

在configureservices方法中调用上面定义的方法:

public void configureservices(iservicecollection services)
{
     // 调用optionconfigure方法
     optionconfigure(services);           
     services.addmvc().setcompatibilityversion(compatibilityversion.version_2_1);
}

在控制器中使用,代码如下:

using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using microsoft.aspnetcore.http;
using microsoft.aspnetcore.mvc;
using microsoft.extensions.options;

namespace readjsondemo.controllers
{
    [route("api/[controller]")]
    [apicontroller]
    public class mongodbcontroller : controllerbase
    {
        private readonly mongodbhostoptions _mongodbhostoptions;

        /// <summary>
        /// 通过构造函数注入
        /// </summary>
        /// <param name="mongodbhostoptions"></param>
        public mongodbcontroller(ioptions<mongodbhostoptions> mongodbhostoptions)
        {
            _mongodbhostoptions = mongodbhostoptions.value;
        }

        [httpget]
        public async task get()
        {
           await response.writeasync("connection:" + _mongodbhostoptions.connection + "\r\ndatabase;" + _mongodbhostoptions.database + "\r\ntable:" + _mongodbhostoptions.table);
        }
    }
}

运行结果:

3、读取自定义json文件

在上面的例子中都是读取的系统自带的appsettings.json文件,那么该如何读取我们自己定义的json文件呢?这里可以使用configurationbuilder类。

实例化类

var builder = new configurationbuilder();

 添加方式1

builder.addjsonfile("path", false, true);

 其中path表示json文件的路径,包括路径和文件名。

添加方式2

builder.add(new jsonconfigurationsource {path= "custom.json",optional=false,reloadonchange=true }).build()

具体代码如下:

private void customoptionconfigure(iservicecollection services)
{
            iconfiguration _configuration;
            var builder = new configurationbuilder();
            // 方式1
            //_configuration = builder.addjsonfile("custom.json", false, true).build();
            // 方式2
            _configuration = builder.add(new jsonconfigurationsource {path= "custom.json",optional=false,reloadonchange=true }).build();
            services.configure<websiteoptions>(_configuration.getsection("websiteconfig"));
}

configureservices方法如下:

public void configureservices(iservicecollection services)
{
            // 调用optionconfigure方法
            optionconfigure(services);
            customoptionconfigure(services);
            services.addmvc().setcompatibilityversion(compatibilityversion.version_2_1);
}

控制器代码如下:

using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using microsoft.aspnetcore.http;
using microsoft.aspnetcore.mvc;
using microsoft.extensions.options;

namespace readjsondemo.controllers
{
    [route("api/[controller]")]
    [apicontroller]
    public class mongodbcontroller : controllerbase
    {
        private readonly mongodbhostoptions _mongodbhostoptions;

        private readonly websiteoptions _websiteoptions;

        /// <summary>
        /// 通过构造函数注入
        /// </summary>
        /// <param name="mongodbhostoptions"></param>
        public mongodbcontroller(ioptions<mongodbhostoptions> mongodbhostoptions,ioptions<websiteoptions> websiteoptions)
        {
            _mongodbhostoptions = mongodbhostoptions.value;
            _websiteoptions = websiteoptions.value;
        }

        [httpget]
        public async task get()
        {
           await response.writeasync("connection:" + _mongodbhostoptions.connection + "\r\ndatabase;" + _mongodbhostoptions.database + "\r\ntable:" + _mongodbhostoptions.table);
            await response.writeasync("\r\n");
            await response.writeasync("websitename:" + _websiteoptions.websitename + "\r\nwebsiteurl;" + _websiteoptions.websiteurl);
        }
    }
}

二、在类库中读取json文件

在上面的示例中都是直接在应用程序中读取的,那么如何在单独的类库中读取json文件呢?看下面的示例代码:

using microsoft.extensions.configuration;
using microsoft.extensions.dependencyinjection;
using microsoft.extensions.options;
using system;
using system.collections.generic;
using system.io;
using system.text;

namespace common
{
    public class jsonconfighelper
    {
        public static t getappsettings<t>(string filename, string key) where t : class, new()
        {
            // 获取bin目录路径
            var directory = appcontext.basedirectory;
            directory = directory.replace("\\", "/");

            var filepath = $"{directory}/{filename}";
            if (!file.exists(filepath))
            {
                var length = directory.indexof("/bin");
                filepath = $"{directory.substring(0, length)}/{filename}";
            }

            iconfiguration configuration;
            var builder = new configurationbuilder();
            
            builder.addjsonfile(filepath, false, true);
            configuration = builder.build();

            var appconfig = new servicecollection()
                .addoptions()
                .configure<t>(configuration.getsection(key))
                .buildserviceprovider()
                .getservice<ioptions<t>>()
                .value;

            return appconfig;
        }
    }
}

注意:这里要添加如下几个程序集,并且要注意添加的程序集的版本要和.net core web项目里面的程序集版本一致,否则会报版本冲突的错误

  • 1、microsoft.extensions.configuration
  • 2、microsoft.extensions.configuration.json
  • 3、microsoft.extensions.options
  • 4、microsoft.extensions.options.configurationextensions
  • 5、microsoft.extensions.options

json文件如下:

{
  "websiteconfig": {
    "websitename": "customwebsite",
    "websiteurl": "https:localhost:12345"
  },
  "dbconfig": {
    "datasource": "127.0.0.1",
    "initialcatalog": "mydb",
    "userid": "sa",
    "password": "123456"
  }
}

dbhostoptions实体类定义如下:

using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;

namespace readjsondemo
{
    public class dbhostoptions
    {
        public string datasource { get; set; }

        public string initialcatalog { get; set; }

        public string userid { get; set; }

        public string password { get; set; }
    }
}

注意:这里的dbhostoptions实体类应该建在单独的类库中,这里为了演示方便直接建在应用程序中了。

在控制器中调用:

using system;
using system.collections.generic;
using system.linq;
using system.threading.tasks;
using common;
using microsoft.aspnetcore.http;
using microsoft.aspnetcore.mvc;
using microsoft.extensions.options;

namespace readjsondemo.controllers
{
    [route("api/[controller]")]
    [apicontroller]
    public class mongodbcontroller : controllerbase
    {
        private readonly mongodbhostoptions _mongodbhostoptions;

        private readonly websiteoptions _websiteoptions;

        /// <summary>
        /// 通过构造函数注入
        /// </summary>
        /// <param name="mongodbhostoptions"></param>
        public mongodbcontroller(ioptions<mongodbhostoptions> mongodbhostoptions,ioptions<websiteoptions> websiteoptions)
        {
            _mongodbhostoptions = mongodbhostoptions.value;
            _websiteoptions = websiteoptions.value;
        }

        [httpget]
        public async task get()
        {
            dbhostoptions dboptions = jsonconfighelper.getappsettings<dbhostoptions>("custom.json", "dbconfig");
            await response.writeasync("datasource:" + dboptions.datasource + "\r\ninitialcatalog;" + dboptions.initialcatalog+ "\r\nuserid:"+dboptions.userid+ "\r\npassword"+dboptions.password);
            await response.writeasync("\r\n");
            await response.writeasync("connection:" + _mongodbhostoptions.connection + "\r\ndatabase;" + _mongodbhostoptions.database + "\r\ntable:" + _mongodbhostoptions.table);
            await response.writeasync("\r\n");
            await response.writeasync("websitename:" + _websiteoptions.websitename + "\r\nwebsiteurl;" + _websiteoptions.websiteurl);           
        }
    }
}

运行结果:

到此这篇关于asp.net core读取json格式配置文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com