在.Net Framework中,配置文件一般采用的是XML格式的,.NET Framework提供了专门的ConfigurationManager来读取配置文件的内容,.net core中推荐使用json格式的配置文件,那么在.net core中该如何读取json文件呢?
1、在Startup类中读取json配置文件
1、使用Configuration直接读取
看下面的代码:
public IConfiguration Configuration { get; }
Configuration属性就是.net core中提供的用来读取json文件。例如:
public voidConfigure(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+" "+option2+ " "+suboption1+ " "+name1+ " "+age1+ " "+name2+ " "+age2));if(env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}else{
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseMvc();
}
结果:
2、使用IOptions接口
1、定义实体类
public classMongodbHostOptions
{///
///连接字符串///
public string Connection { get; set; }///
///库///
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 voidOptionConfigure(IServiceCollection services)
{//MongodbHost信息
services.Configure(Configuration.GetSection("MongodbHost"));
}
在ConfigureServices方法中调用上面定义的方法:
public voidConfigureServices(IServiceCollection services)
{//调用OptionConfigure方法
OptionConfigure(services);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
在控制器中使用,代码如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Options;namespaceReadJsonDemo.Controllers
{
[Route("api/[controller]")]
[ApiController]public classMongodbController : ControllerBase
{private readonlyMongodbHostOptions _mongodbHostOptions;///
///通过构造函数注入///
///
public MongodbController(IOptionsmongodbHostOptions)
{
_mongodbHostOptions=mongodbHostOptions.Value;
}
[HttpGet]public asyncTask Get()
{await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + " DataBase;" + _mongodbHostOptions.DataBase + " Table:" +_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 voidCustomOptionConfigure(IServiceCollection services)
{
IConfiguration _configuration;var builder = newConfigurationBuilder();//方式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(_configuration.GetSection("WebSiteConfig"));
}
ConfigureServices方法如下:
public voidConfigureServices(IServiceCollection services)
{//调用OptionConfigure方法
OptionConfigure(services);
CustomOptionConfigure(services);
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
控制器代码如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Options;namespaceReadJsonDemo.Controllers
{
[Route("api/[controller]")]
[ApiController]public classMongodbController : ControllerBase
{private readonlyMongodbHostOptions _mongodbHostOptions;private readonlyWebSiteOptions _webSiteOptions;///
///通过构造函数注入///
///
public MongodbController(IOptions mongodbHostOptions,IOptionswebSiteOptions)
{
_mongodbHostOptions=mongodbHostOptions.Value;
_webSiteOptions=webSiteOptions.Value;
}
[HttpGet]public asyncTask Get()
{await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + " DataBase;" + _mongodbHostOptions.DataBase + " Table:" +_mongodbHostOptions.Table);await Response.WriteAsync(" ");await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + " WebSiteUrl;" +_webSiteOptions.WebSiteUrl);
}
}
}
二、在类库中读取json文件
在上面的示例中都是直接在应用程序中读取的,那么如何在单独的类库中读取json文件呢?看下面的示例代码:
usingMicrosoft.Extensions.Configuration;usingMicrosoft.Extensions.DependencyInjection;usingMicrosoft.Extensions.Options;usingSystem;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Text;namespaceCommon
{public classJsonConfigHelper
{public static T GetAppSettings(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 = newConfigurationBuilder();
builder.AddJsonFile(filePath,false, true);
configuration=builder.Build();var appconfig = newServiceCollection()
.AddOptions()
.Configure(configuration.GetSection(key))
.BuildServiceProvider()
.GetService>()
.Value;returnappconfig;
}
}
}
注意:这里要添加如下几个程序集,并且要注意添加的程序集的版本要和.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实体类定义如下:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;namespaceReadJsonDemo
{public classDbHostOptions
{public string DataSource { get; set; }public string InitialCatalog { get; set; }public string UserId { get; set; }public string Password { get; set; }
}
}
注意:这里的DbHostOptions实体类应该建在单独的类库中,这里为了演示方便直接建在应用程序中了。
在控制器中调用:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;usingCommon;usingMicrosoft.AspNetCore.Http;usingMicrosoft.AspNetCore.Mvc;usingMicrosoft.Extensions.Options;namespaceReadJsonDemo.Controllers
{
[Route("api/[controller]")]
[ApiController]public classMongodbController : ControllerBase
{private readonlyMongodbHostOptions _mongodbHostOptions;private readonlyWebSiteOptions _webSiteOptions;///
///通过构造函数注入///
///
public MongodbController(IOptions mongodbHostOptions,IOptionswebSiteOptions)
{
_mongodbHostOptions=mongodbHostOptions.Value;
_webSiteOptions=webSiteOptions.Value;
}
[HttpGet]public asyncTask Get()
{
DbHostOptions dbOptions= JsonConfigHelper.GetAppSettings("custom.json", "DbConfig");await Response.WriteAsync("DataSource:" + dbOptions.DataSource + " InitialCatalog;" + dbOptions.InitialCatalog+ " UserId:"+dbOptions.UserId+ " Password"+dbOptions.Password);await Response.WriteAsync(" ");await Response.WriteAsync("Connection:" + _mongodbHostOptions.Connection + " DataBase;" + _mongodbHostOptions.DataBase + " Table:" +_mongodbHostOptions.Table);await Response.WriteAsync(" ");await Response.WriteAsync("WebSiteName:" + _webSiteOptions.WebSiteName + " WebSiteUrl;" +_webSiteOptions.WebSiteUrl);
}
}
}
运行结果:
1 public class FrameSubject extends JFrame { 2 3 ………….. 4 5 //因为无法使用多重继承,这儿就只能使用对象组合的方式来引入一个 6 7 //java.util.Observerable对象了。 8 9 DateSub...
本案例主要说明如何使用NSwag 工具使用桌面工具快速生成c# 客户端代码、快速的访问Web Api。 NSwagStudio 下载地址 比较强大、可以生成TypeScript、WebApi Controller、CSharp Client 1、运行WebApi项目 URL http://yourserver/swagger 然后...
在绑定完Action的所有参数后,WebAPI并不会马上执行该方法,而要对参数进行验证,以保证输入的合法性. ModelState 在ApiController中一个ModelState属性用来获取参数验证结果. public abstract class ApiController : IHttpController,...
1# 引用 C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.dll C:AVEVAMarineOH12.1.SP4Aveva.ApplicationFramework.Presentation.dll 2# 引用命名空间, using Aveva.Applicati...
importjava.security.SecureRandom;importjavax.crypto.Cipher;importjavax.crypto.SecretKey;importjavax.crypto.SecretKeyFactory;importjavax.crypto.spec.DESKeySpec;//结果与DES算...
题目:替换空格 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 输入:s = "We are happy." 输出:"We%20are%20happy." 限制: 0 <= s 的长度 <= 10000 解题: 时间复杂度:O(n) 空间复杂度:O(n) class Solution { public:s...
在C++11标准库中,string.h已经添加了to_string方法,方便从其他类型(如整形)快速转换成字面值。 例如: for (size_t i = 0; i < texArrSize; i++)RTX_Shader.SetInt(string("TexArr[") + to_string(i) + "]", 7 + i);...
Ubuntu 14.04安装并升级之后,变成楷体字体非常难看,我昨天搞了一晚上,终于理了个头绪,这里整理一下。 经过网上调研,大家的一致看法是,使用开源字体库文泉驿的微黑字体效果比较理想,甚至效果不输windows平台的雅黑字体。下面我打算微黑来美化Ubuntu 14.04. 1.安装文泉驿微黑字体库 sudo aptitude...
使用string时发现了一些坑。 我们知道stl 容器并不是线程安全的,所以在使用它们的过程中往往需要一些同步机制来保证并发场景下的同步更新。 应该踩的坑还是一个不拉的踩了进去,所以还是记录一下吧。 string作为一个容器,随着我们的append 或者 针对string的+ 操作都会让string内部的数据域动态增加,而动态增加的...
下面是我依据网上资料的实操过程,记录以作备忘。该示例给出了https通信并处理json文件的例子。 平台:Ubuntu 16.04.3 LTS go版本:1.10 1.生成自签名的服务器端的私钥KEY和公钥证书 openssl genrsa -out server.key 2048 openssl req -new -x509 -ke...
hive提供了json的解析函数:get_json_object 使用方法 对于jsonArray(json数组),如person表的xjson字段有数据: [{"name":"王二狗","sex":"男","age":"25"},{"name":"李狗嗨","sex":"男","age":"47"}] 取出第一个json对象...
1、判断json是否为空 jQuery.isEmptyObject(); 2、遍历json function getHsonLength(json{var jsonLength=0;for (var i in json){jsonLength++;}return jsonLength;} 转载于:https...
简单示例: import request from 'superagent';//引用声明 request.post(api).withCredentials()//跨域.end((err, res) => {if (res.ok) {const json = JSON.parse(res.text);} else {console...
在使用C#开发爬虫程序时,会遇到需要解析json字符串的情况。对于json字符串可以使用正则表达式的形式进行解析,更为方便的方法是使用Newtonsoft.Json来实现。 Nuget添加应用包 在工程上右键——【管理Nuget程序包】浏览找到要安装的程序包Newtonsoft.Json使用 引用using Newtonsoft...