.net core 中的配置文件
前言
在 .NET Core 项目中,配置文件有着举足轻重的地位;与.NetFramework 不同的是,.NET Core 的配置文件都以 .json 结尾,这表示一个标准的 json 格式的文件;一个标准的 Asp.Net Core MVC 项目,一定带着一个 appsettings.json 文件,该文件便是项目默认配置文件,这和基于 .NetFramework 创建的 Asp.Net Web Application (默认配置名称:App.config) 有着根本的不同,今天我们就学习如何添加自定义配置到文件中,并把该配置在程序中读取出来;然后再通过使用 host.json 这个配置文件使程序运行于多个端口。
1. appsettings.json 文件
1.1 appsettings.json 文件是一个标准的 json 结构的文件,这表示你只要按照 json 的结构写入该文件,无论什么内容,都能在程序中自动读取,当我们创建好 MVC 项目后,系统就自动帮我们创建好 appsettings.json 文件,其默认内容如下:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
1.2 下面我们加一个配置节点 "book":"博客园精华文章选集"
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"book":"博客园精华文章选集"
}
1.3 在控制器 Controllers/HomeController.cs 中将该节点内容设置为网页标题输出,记得引用命名空间
using Microsoft.Extensions.Configuration;
在 Index 方法中加入参数 IConfiguration,如下
public IActionResult Index([FromServices]IConfiguration cfg)
{
return View();
}
1.4 输入命令 dotnet run 启动项目,结果如下,读取自定义配置成功

1.5 将配置文件节点转换为实体类
- 我们常常有这样的需求,在配置文件中做了一堆配置,但是又不想逐个读取,太麻烦,如果能转换为实体类就好了,其实 IConfiguration 就自带了该天赋,看下面的配置
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"book":"博客园精华文章选集",
"customer":{
"name":"ron.liang",
"gender":"man",
"job":"coder"
}
}
- 定义实体类
public class Customer{
public string Name { get; set; }
public string Gender{get;set;}
public string Job{get;set;}
}
- 转换为实体类,可以看到,已经转换成功,对象属性都已获得了值

另类方式使用 hosting.json 使程序运行于多个端口
2.1 定义 hosting.json 文件
- 在实际的开发中,程序运行必需定义清晰的端口,不能使用随机模式,这个时候,我们可以利用 hosting.json 文件来定义,无论程序发布到何处,永远以该文件定义的端口来运行,首先在项目根目录下创建一个 hosting.json 文件,并填入以下内容。
{
"server.urls": "http://0.0.0.0:12006;http://0.0.0.0:12007"
}
2.2 修改 Program.cs 方法
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var hostConfiguration = new ConfigurationBuilder().AddJsonFile("hosting.json").Build();
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseConfiguration(hostConfiguration);
}
- 以上方法将刚才创建的 hosting.json 加入配置中,并指定程序启动使用该配置文件
2.2 删除 Properties 目录下的 launchSettings.json 文件
2.3 运行项目,可以看到,现在项目侦听端口 12006/12007

结语
- 通过本文,我们学习到了以下内容
1. 知道了appsettings.json 的作用,以及如何从配置文件中读取项目配置节点
2. 如何通过 IConfiguration 把配置节点转换为实体对象
3. 使用 hosting.json 使程序运行于多个自定义端口
.net core 中的配置文件的更多相关文章
- 在.NET CORE中使用配置文件:对 ConfigurationBuilder 的使用说明
示例:ASP.NET MVC 使用示例: 如何覆写默认行为?如取消热更新支持,方法如下: 示例:控制台 使用应用程序参数 使用键值对枚举(这里以字典来说明) 使用JSON文件 注册配置文件中的某一个段 ...
- .Net Core中的配置文件源码解析
一.配置简述 之前在.Net Framework平台开发时,一般配置文件都是xml格式的Web.config,而需要配置其他格式的文件就需要自己去读取内容,加载配置了..而Net Core支持从命令行 ...
- .net core中读取配置文件
1)先看丑陋的方法 读取 appsettings.json 然后在 Startup 的 ConfigureServices() 方法中进行注入: public IConfigurationRoot ...
- ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项
前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...
- .NET平台开源项目速览(20)Newlife.Core中简单灵活的配置文件
记得5年前开始拼命翻读X组件的源码,特别是XCode,但对Newlife.Core 的东西了解很少,最多只是会用用,而且用到的只是九牛一毛.里面好用的东西太多了. 最近一年时间,零零散散又学了很多,也 ...
- Asp.net Core中使用Redis 来保存Session, 读取配置文件
今天 无意看到Asp.net Core中使用Session ,首先要使用Session就必须添加Microsoft.AspNetCore.Session包,默认Session是只能存去字节,所以如果你 ...
- .NET Core类库中读取配置文件
最近在开发基于.NET Core的NuGet包,遇到一个问题:.NET Core中已经没有ConfigurationManager类,在类库中无法像.NET Framework那样读取App.conf ...
- [08]ASP.NET Core 中 launchsettings.json 启动配置文件
ASP.NET Core launchsettings.json 启动配置文件 本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP) 文章会随着版本进行更新,关注我获取最新版本 本文出自 ...
- 在ASP.NET Core中使用百度在线编辑器UEditor
在ASP.NET Core中使用百度在线编辑器UEditor 0x00 起因 最近需要一个在线编辑器,之前听人说过百度的UEditor不错,去官网下了一个.不过服务端只有ASP.NET版的,如果是为了 ...
随机推荐
- 关于 tornado.simple_httpclient SimpleAsyncHTTPClient fetch下载大文件,默认60s的问题
遇到了线上发布任务失败的情况,要发布的包大小77M,网络OK,手动测试速度是1.7M,下载77M文件用时17s左右,理论上完全没有问题 但是,从日志看确实是download的时候,60s 超时了,而且 ...
- Idea_学习_07_Idea常用配置
二.参考资料 1.Android Studio 入门级教程(一)
- Python 爬虫 —— 文件及文件夹操作
0. 文件名.路径信息.拓展名等 #取文件后缀 >>> os.path.splitext("/root/a.py") ('/root/a', '.py') #取目 ...
- Maven发布项目丢失Mybatis Mapper包的映射问题
由于一些eclipse版本问题,mybatis的mapper包中的sql文件没有被打进包,需要在pom中加入: <build> <!--配置打包时不过滤非java文件开始 --> ...
- Gym 100801B Black and White(构造)
题意:给定X,Y,分别表示由'.'和'@'组成的连通块的个数. 思路:假如X<Y,我们用两部分来构造这个结果,第一部分由一个'.'连通块和Y-(X-1)割'@'连通块组成,第二个部分由X-1个' ...
- 命令行启动nodejs方式 小总结
之前启动nodejs都是写一个命令行文件,如nodejs.cmd,内容为:start node E:\node\app.js. 今天突然想到之前也用过另外一种方式启动,就是在命令行通过cd命令先找到n ...
- [转]javascript单元测试
1. 什么是单元测试 在计算机编程中,单元测试(又称为模块测试)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作.程序单元是应用的最小可测试部件.在过程化编程中,一个单元就是单 ...
- BZOJ1972:[SDOI2010]猪国杀
我对模拟的理解:https://www.cnblogs.com/AKMer/p/9064018.html 题目传送门:https://www.lydsy.com/JudgeOnline/problem ...
- Git 权限控制
除了 Git 命令,权限控制也是 Git 中极为重要的组成部分,本文主要介绍 GitLab 系统提供的最常用的权限控制功能. 一.分配成员角色 首先来了解下,Git 中的五种角色: 每一种角色所拥有的 ...
- Python:urllib模块的urlretrieve方法
转于:https://blog.csdn.net/fengzhizi76506/article/details/59229846 博主:fengzhizi76506 1)功能: urllib模块提供的 ...