温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-03-14 09:08:23 来源:亿速云 阅读:746 作者:小新 栏目:开发技术

这篇文章将为大家详细讲解有关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项目里面的程序集版本一致,否则会报版本冲突的错误

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

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

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI