ASP.NET?CORE讀取json格式配置文件
在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了專門的ConfigurationManager來(lái)讀取配置文件的內(nèi)容,.net core中推薦使用json格式的配置文件,那么在.net core中該如何讀取json文件呢?
一、在Startup類中讀取json配置文件
1、使用Configuration直接讀取
看下面的代碼:
public IConfiguration Configuration { get; }Configuration屬性就是.net core中提供的用來(lái)讀取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"]}";
// 讀取數(shù)組
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();
}結(jié)果:

2、使用IOptions接口
1、定義實(shí)體類
public class MongodbHostOptions
{
/// <summary>
/// 連接字符串
/// </summary>
public string Connection { get; set; }
/// <summary>
/// 庫(kù)
/// </summary>
public string DataBase { get; set; }
public string Table { get; set; }
}2、修改json文件
在appsettings.json文件中添加MongodbHost節(jié)點(diǎn):
{
"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里面的屬性名必須要和定義的實(shí)體類里面的屬性名稱一致。
3、在StartUp類里面配置
添加OptionConfigure方法綁定
private void OptionConfigure(IServiceCollection services)
{
//MongodbHost信息
services.Configure<MongodbHostOptions>(Configuration.GetSection("MongodbHost"));
}在ConfigureServices方法中調(diào)用上面定義的方法:
public void ConfigureServices(IServiceCollection services)
{
// 調(diào)用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>
/// 通過(guò)構(gòu)造函數(shù)注入
/// </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);
}
}
}運(yùn)行結(jié)果:

3、讀取自定義json文件
在上面的例子中都是讀取的系統(tǒng)自帶的appsettings.json文件,那么該如何讀取我們自己定義的json文件呢?這里可以使用ConfigurationBuilder類。
實(shí)例化類
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)
{
// 調(diào)用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>
/// 通過(guò)構(gòu)造函數(shù)注入
/// </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);
}
}
}二、在類庫(kù)中讀取json文件
在上面的示例中都是直接在應(yīng)用程序中讀取的,那么如何在單獨(dú)的類庫(kù)中讀取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;
}
}
}注意:這里要添加如下幾個(gè)程序集,并且要注意添加的程序集的版本要和.net core web項(xiàng)目里面的程序集版本一致,否則會(huì)報(bào)版本沖突的錯(cuò)誤
- 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實(shí)體類定義如下:
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實(shí)體類應(yīng)該建在單獨(dú)的類庫(kù)中,這里為了演示方便直接建在應(yīng)用程序中了。
在控制器中調(diào)用:
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>
/// 通過(guò)構(gòu)造函數(shù)注入
/// </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);
}
}
}運(yùn)行結(jié)果:

到此這篇關(guān)于ASP.NET CORE讀取json格式配置文件的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- ASP.NET Core配置文件的獲取和設(shè)置
- ASP.NET Core讀取配置文件
- ASP.NET Core應(yīng)用程序配置文件AppSetting.json
- ASP.NET Core根據(jù)環(huán)境變量支持多個(gè) appsettings.json配置文件
- ASP.NET Core中修改配置文件后自動(dòng)加載新配置的方法詳解
- Asp.net Core與類庫(kù)讀取配置文件信息的方法
- 如何在ASP.NET Core類庫(kù)項(xiàng)目中讀取配置文件詳解
- ASP.NET core Web中使用appsettings.json配置文件的方法
- 詳解ASP.NET Core 在 JSON 文件中配置依賴注入
- 如何使用ASP.NET?Core?配置文件
相關(guān)文章
使用vs2022在.net6中調(diào)試帶typescript的靜態(tài)頁(yè)面
這篇文章介紹了使用vs2022在.net6中調(diào)試帶typescript的靜態(tài)頁(yè)面,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
ASP.NET?Core中Startup類、Configure()方法及中間件詳解
本文詳細(xì)講解了ASP.NET?Core中Startup類、Configure()方法及中間件,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
ASP.NET MVC把數(shù)據(jù)庫(kù)中枚舉項(xiàng)的數(shù)字轉(zhuǎn)換成文字
這篇文章介紹了ASP.NET MVC把數(shù)據(jù)庫(kù)中枚舉項(xiàng)的數(shù)字轉(zhuǎn)換成文字的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
.Net行為型設(shè)計(jì)模式之訪問(wèn)者模式(Visitor)
這篇文章介紹了.Net行為型設(shè)計(jì)模式之訪問(wèn)者模式(Visitor),文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05
C#簡(jiǎn)單獲取屏幕鼠標(biāo)坐標(biāo)點(diǎn)顏色方法介紹
C#簡(jiǎn)單獲取屏幕鼠標(biāo)坐標(biāo)點(diǎn)顏色方法介紹;有需求的朋友可以參考下2012-11-11
Asp.Net 不同的OnClick事件區(qū)別小結(jié)(onserverclick,onclientclick)
下面以 HTML的按鈕( system.web.ui.htmlcontrols ) 和 ASP.NET服務(wù)端按鈕 ( system.web.ui.webcontrols ) 為例2012-05-05

