文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-29 11:47

关注

这篇文章将为大家详细讲解有关ASP.NET CORE如何读取json格式配置文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

在.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();}

结果:

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

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);        }    }}

运行结果:

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

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项目里面的程序集版本一致,否则会报版本冲突的错误

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格式配置文件

关于“ASP.NET CORE如何读取json格式配置文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯