MVC + EFCore 完整教程19-- 最简方法读取json配置:自定义configuration读取配置文件
问题引出
ASP.NET Core 默认将 Web.config移除了,将配置文件统一放在了 xxx.json 格式的文件中。
有Web.config时,我们需要读到配置文件时,一般是这样的:
var value1= ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;
这个ConfigurationManager是在System.Configuration 命名空间下的。
很不幸,默认情况下这个方法也不能用了。
如果在Controller需要读取配置文件,在Startup.cs文件中注册相关服务,可以类似于注册context一样:
// 1、注册相关服务,类似于如下的XXXContext的例子
services.AddDbContext<XXXContext>(XXX 。。。
// 2、controller读取
然后在具体controller的构造函数中作为参数获取。
类似于:
private IConfiguration _configuration;
public XXXController(IConfiguration configuration)
{
_configuration = configuration;
}
具体实现方式已有多篇文章讲解,请自行搜索,不再赘述。
这种方式引出两个问题:
1、多数controller是需要读取context的,但不是每个controller都需要读取配置文件,这种方式不够简洁
2、如果我们需要在controller之外的其他类文件中读取呢?
我们仿照ConfigurationManager读取Web.config中文件的方式,自定义一个MyConfigurationManager 类。
我直接在上一篇文章中的示例程序添加演示。
详细步骤
步骤一:准备好素材,appsettings.json添加配置项
"GrandParent_Key": { "Parent_Key": { "Child_Key": "value1" } },
"Parent_Key": { "Child_Key": "value2" },
"Child_Key": "value3"

步骤二:添加 MyConfigurationManager.cs

/// <summary>
/// 获取自定义的 json 配置文件
/// </summary>
static class MyConfigurationManager
{
public static IConfiguration AppSetting { get; }
static MyConfigurationManager()
{
// 注意:2.2版本的这个路径不对 会输出 xxx/IIS Express...类似这种路径,
// 等3.0再看有没其他变化
string directory = Directory.GetCurrentDirectory();
AppSetting = new ConfigurationBuilder()
.SetBasePath(directory)
.AddJsonFile("myAppSettings.json")
.Build();
}
}
步骤三:调用
我们去HomeController中添加一个测试方法
public IActionResult ConfigTest()
{
string value1 = MyConfigurationManager.AppSetting["GrandParent_Key:Parent_Key:Child_Key"];
string value2 = MyConfigurationManager.AppSetting["Parent_Key:Child_Key"];
string value3 = MyConfigurationManager.AppSetting["Child_Key"];
return View();
}
加个断点调试一下,可以看到输出了想要的结果。
总结
通过自定义的Configuration方法可以方便读取json文件。
获取配置文件路径时,AppContext.BaseDirectory在 .net core 2.2和2.1不一样,
如果事先用的2.2模板,需要右键项目,将target framework设为2.1

P.S. 路径获取这块给出一个通用的方法,这样2.1和2.2就都满足了,如下:
var fileName = "appsettings.json";
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}";
}
祝 学习进步 :)
P.S. 系列文章列表:https://www.cnblogs.com/miro/p/3777960.html

MVC + EFCore 完整教程19-- 最简方法读取json配置:自定义configuration读取配置文件的更多相关文章
- MVC+EFCore 完整教程18 -- 升级分布视图至 View Component
之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view component, 可以认为view component是 ...
- MVC + EFCore 项目实战 - 数仓管理系统2- 搭建基本框架配置EFCore
本次课程就正式进入开发部分. 首先我们先搭建项目框架,还是和之前渐进式风格保持一致,除必备组件外,尽量使用原生功能以方便大家理解. 开发工具:vs 2019 或以上 数据库:SQL SERVER 20 ...
- 开源题材征集 + MVC&EF Core 完整教程小结
到目前为止,我们的MVC+EF Core 完整教程的理论部分就全部结束了,共20篇,覆盖了核心的主要知识点. 下一阶段是实战部分,我们将会把这些知识点串联起来,用10篇(天)来完成一个开源项目. 现向 ...
- MVC+EFCore 项目实战-数仓管理系统1
项目背景及需求说明 这是一个数据管理"工具类"的系统,计划有三个核心功能: 1.通过界面配置相关连接字符串,查询数据库的表数据. 2.配置相关模板,生成数据库表. 可以界面填报或通 ...
- MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用
摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...
- ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解
原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details 方法 打开M ...
- ASP.NET + MVC5 入门完整教程七 -—-- MVC基本工具(上)
https://blog.csdn.net/qq_21419015/article/details/80474956 这里主要介绍三类工具之一的 依赖项注入(DI)容器,其他两类 单元测试框架和模仿工 ...
- ASP.NET + MVC5 入门完整教程三 (下) ---MVC 松耦合
建立松耦合组件 MVC 模式最重要的特性之一视他支持关注分离,希望应用程序中的组件尽可能独立,只有很少的几个可控依赖项.在理想的情况下,每个组件都不了解其他组件,而只是通过抽象接口来处理应用程序的其他 ...
- Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。
系列目录 1.Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...
随机推荐
- 用Python和Pandas以及爬虫技术统计历史天气
背景 最近在计划明年从北京rebase到深圳去,所以最近在看深圳的各个方面.去年在深圳呆过一段时间,印象最深的是,深圳总是突然就下雨,还下好大的雨.对于我这种从小在南方长大但是后面又在北京呆了2年多的 ...
- 洛谷P2055 [ZJOI2009]假期的宿舍 题解
题目链接: https://www.luogu.org/problemnew/show/P2055 分析: 这道题比较简单,二分图的练习题(当然最大流同理). 易得我们可以将人放在一侧,床放在一侧. ...
- Java项目案例之---登录和修改(JSP)
登录和修改(JSP) 通过案例学习jsp的常用知识点: 1.创建一个Map集合,用于存放学生信息,将学生信息存入Map中 2.通过page将需要的包导入 3.用request.getParameter ...
- Python学习3——Python的简单推导
列表推导是一种从其他列表创建列表的方式,类似于数学中的集合推导,列表推导的工作原理非常简单,类似于for循环.(以下代码均在IDLE实现) 最简单的列表推导: >>>[x*x for ...
- Makefile简单的配置
一.文件配置目录 1)原目录 demo ├── Makefile ├── demo.cpp ├── demo.hpp └── main.cpp 2)make之后的目录 demo ├── Makefil ...
- 【MySQL】(四)表
本篇文章将从InnoDB存储引擎表的逻辑存储及实现开始进行介绍,然后将重点分析表的物理存储特征,即数据在表中是如何组织存放的.简单来说,表就是关于特定实体的数据集合,这也是关系型数据库模型的核心. 1 ...
- c++语言常用转义序列符号
\a 响铃 \n 换行符 \r 回车符 t 水平制表符(Tab键) \b 退格符(BackSpace键) \\ 反斜线 \' ...
- NetworkStream.Read
Reads data from the NetworkStream. 参数 buffer 类型:System.Byte[]类型 Byte 的数组,它是内存中用于存储从 NetworkStream 读取 ...
- linux初学者-系统日志(一)
linux初学者-系统日志(一) 系统日志可以记录系统的运行状态,如果运行故障,会说明错误的位置.所以对系统日志的了解和学习是非常有必要的. 1.系统日志的默认分类 系统日志会默认记录在以下地址中,不 ...
- mybatis01-1测试
首先需要数据源信息和日志文件 然后一个SQLMapConfig.xml配置文件连接数据库并且映射后一个xml文件,另一个xml文件写入SQL语句, 最后text测试文件读取第一个配置文件,放到SQLS ...