经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JSON » 查看文章
ASP.NET?CORE读取json格式配置文件
来源:jb51  时间:2022/3/14 9:45:59  对本文有异议

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

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

1、使用Configuration直接读取

看下面的代码:

  1. public IConfiguration Configuration { get; }

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

  1. public void Configure(IApplicationBuilder app, IHostingEnvironment env)
  2. {
  3.  
  4. string option1 = $"option1 = {this.Configuration["Option1"]}";
  5. string option2 = $"option2 = {this.Configuration["Option2"]}";
  6. string suboption1 = $"suboption1 = {this.Configuration["subsection:suboption1"]}";
  7. // 读取数组
  8. string name1 = $"Name={this.Configuration["student:0:Name"]} ";
  9. string age1 = $"Age= {this.Configuration["student:0:Age"]}";
  10. string name2 = $"Name={this.Configuration["student:1:Name"]}";
  11. string age2 = $"Age= {this.Configuration["student:1:Age"]}";
  12. // 输出
  13. 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));
  14. if (env.IsDevelopment())
  15. {
  16. app.UseDeveloperExceptionPage();
  17. }
  18. else
  19. {
  20. app.UseHsts();
  21. }
  22.  
  23. app.UseHttpsRedirection();
  24. app.UseMvc();
  25. }

结果:

2、使用IOptions接口

1、定义实体类

  1. public class MongodbHostOptions
  2. {
  3. /// <summary>
  4. /// 连接字符串
  5. /// </summary>
  6. public string Connection { get; set; }
  7. /// <summary>
  8. /// 库
  9. /// </summary>
  10. public string DataBase { get; set; }
  11.  
  12. public string Table { get; set; }
  13. }

2、修改json文件

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

  1. {
  2. "Logging": {
  3. "LogLevel": {
  4. "Default": "Warning"
  5. }
  6. },
  7. "option1": "value1_from_json",
  8. "option2": 2,
  9. "subsection": {
  10. "suboption1": "subvalue1_from_json"
  11. },
  12. "student": [
  13. {
  14. "Name": "Gandalf",
  15. "Age": "1000"
  16. },
  17. {
  18. "Name": "Harry",
  19. "Age": "17"
  20. }
  21. ],
  22. "AllowedHosts": "*",
  23. //MongoDb
  24. "MongodbHost": {
  25. "Connection": "mongodb://127.0.0.1:27017",
  26. "DataBase": "TemplateDb",
  27. "Table": "CDATemplateInfo"
  28. }
  29. }

注意:

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

3、在StartUp类里面配置

添加OptionConfigure方法绑定

  1. private void OptionConfigure(IServiceCollection services)
  2. {
  3. //MongodbHost信息
  4. services.Configure<MongodbHostOptions>(Configuration.GetSection("MongodbHost"));
  5. }

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

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. // 调用OptionConfigure方法
  4. OptionConfigure(services);
  5. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
  6. }

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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.Extensions.Options;
  8.  
  9. namespace ReadJsonDemo.Controllers
  10. {
  11. [Route("api/[controller]")]
  12. [ApiController]
  13. public class MongodbController : ControllerBase
  14. {
  15. private readonly MongodbHostOptions _mongodbHostOptions;
  16.  
  17. /// <summary>
  18. /// 通过构造函数注入
  19. /// </summary>
  20. /// <param name="mongodbHostOptions"></param>
  21. public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions)
  22. {
  23. _mongodbHostOptions = mongodbHostOptions.Value;
  24. }
  25.  
  26. [HttpGet]
  27. public async Task Get()
  28. {
  29. await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
  30. }
  31. }
  32. }

运行结果:

3、读取自定义json文件

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

实例化类

  1. var builder = new ConfigurationBuilder();

 添加方式1

  1. builder.AddJsonFile("path", false, true);

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

添加方式2

  1. builder.Add(new JsonConfigurationSource {Path= "custom.json",Optional=false,ReloadOnChange=true }).Build()

具体代码如下:

  1. private void CustomOptionConfigure(IServiceCollection services)
  2. {
  3. IConfiguration _configuration;
  4. var builder = new ConfigurationBuilder();
  5. // 方式1
  6. //_configuration = builder.AddJsonFile("custom.json", false, true).Build();
  7. // 方式2
  8. _configuration = builder.Add(new JsonConfigurationSource {Path= "custom.json",Optional=false,ReloadOnChange=true }).Build();
  9. services.Configure<WebSiteOptions>(_configuration.GetSection("WebSiteConfig"));
  10. }

ConfigureServices方法如下:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. // 调用OptionConfigure方法
  4. OptionConfigure(services);
  5. CustomOptionConfigure(services);
  6. services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
  7. }

控制器代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.AspNetCore.Mvc;
  7. using Microsoft.Extensions.Options;
  8.  
  9. namespace ReadJsonDemo.Controllers
  10. {
  11. [Route("api/[controller]")]
  12. [ApiController]
  13. public class MongodbController : ControllerBase
  14. {
  15. private readonly MongodbHostOptions _mongodbHostOptions;
  16.  
  17. private readonly WebSiteOptions _webSiteOptions;
  18.  
  19. /// <summary>
  20. /// 通过构造函数注入
  21. /// </summary>
  22. /// <param name="mongodbHostOptions"></param>
  23. public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions,IOptions<WebSiteOptions> webSiteOptions)
  24. {
  25. _mongodbHostOptions = mongodbHostOptions.Value;
  26. _webSiteOptions = webSiteOptions.Value;
  27. }
  28.  
  29. [HttpGet]
  30. public async Task Get()
  31. {
  32. await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
  33. await Response.WriteAsync("\r\n");
  34. await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + "\r\nWebSiteUrl;" + _webSiteOptions.WebSiteUrl);
  35. }
  36. }
  37. }

二、在类库中读取json文件

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

  1. using Microsoft.Extensions.Configuration;
  2. using Microsoft.Extensions.DependencyInjection;
  3. using Microsoft.Extensions.Options;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Text;
  8.  
  9. namespace Common
  10. {
  11. public class JsonConfigHelper
  12. {
  13. public static T GetAppSettings<T>(string fileName, string key) where T : class, new()
  14. {
  15. // 获取bin目录路径
  16. var directory = AppContext.BaseDirectory;
  17. directory = directory.Replace("\\", "/");
  18.  
  19. var filePath = $"{directory}/{fileName}";
  20. if (!File.Exists(filePath))
  21. {
  22. var length = directory.IndexOf("/bin");
  23. filePath = $"{directory.Substring(0, length)}/{fileName}";
  24. }
  25.  
  26. IConfiguration configuration;
  27. var builder = new ConfigurationBuilder();
  28. builder.AddJsonFile(filePath, false, true);
  29. configuration = builder.Build();
  30.  
  31. var appconfig = new ServiceCollection()
  32. .AddOptions()
  33. .Configure<T>(configuration.GetSection(key))
  34. .BuildServiceProvider()
  35. .GetService<IOptions<T>>()
  36. .Value;
  37.  
  38. return appconfig;
  39. }
  40. }
  41. }

注意:这里要添加如下几个程序集,并且要注意添加的程序集的版本要和.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文件如下:

  1. {
  2. "WebSiteConfig": {
  3. "WebSiteName": "CustomWebSite",
  4. "WebSiteUrl": "https:localhost:12345"
  5. },
  6. "DbConfig": {
  7. "DataSource": "127.0.0.1",
  8. "InitialCatalog": "MyDb",
  9. "UserId": "sa",
  10. "Password": "123456"
  11. }
  12. }

DbHostOptions实体类定义如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5.  
  6. namespace ReadJsonDemo
  7. {
  8. public class DbHostOptions
  9. {
  10. public string DataSource { get; set; }
  11.  
  12. public string InitialCatalog { get; set; }
  13.  
  14. public string UserId { get; set; }
  15.  
  16. public string Password { get; set; }
  17. }
  18. }

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

在控制器中调用:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Common;
  6. using Microsoft.AspNetCore.Http;
  7. using Microsoft.AspNetCore.Mvc;
  8. using Microsoft.Extensions.Options;
  9.  
  10. namespace ReadJsonDemo.Controllers
  11. {
  12. [Route("api/[controller]")]
  13. [ApiController]
  14. public class MongodbController : ControllerBase
  15. {
  16. private readonly MongodbHostOptions _mongodbHostOptions;
  17.  
  18. private readonly WebSiteOptions _webSiteOptions;
  19.  
  20. /// <summary>
  21. /// 通过构造函数注入
  22. /// </summary>
  23. /// <param name="mongodbHostOptions"></param>
  24. public MongodbController(IOptions<MongodbHostOptions> mongodbHostOptions,IOptions<WebSiteOptions> webSiteOptions)
  25. {
  26. _mongodbHostOptions = mongodbHostOptions.Value;
  27. _webSiteOptions = webSiteOptions.Value;
  28. }
  29.  
  30. [HttpGet]
  31. public async Task Get()
  32. {
  33. DbHostOptions dbOptions = JsonConfigHelper.GetAppSettings<DbHostOptions>("custom.json", "DbConfig");
  34. await Response.WriteAsync("DataSource:" + dbOptions.DataSource + "\r\nInitialCatalog;" + dbOptions.InitialCatalog+ "\r\nUserId:"+dbOptions.UserId+ "\r\nPassword"+dbOptions.Password);
  35. await Response.WriteAsync("\r\n");
  36. await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + "\r\nDataBase;" + _mongodbHostOptions.DataBase + "\r\nTable:" + _mongodbHostOptions.Table);
  37. await Response.WriteAsync("\r\n");
  38. await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + "\r\nWebSiteUrl;" + _webSiteOptions.WebSiteUrl);
  39. }
  40. }
  41. }

运行结果:

到此这篇关于ASP.NET CORE读取json格式配置文件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号