问题引出

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读取配置文件的更多相关文章

  1. MVC+EFCore 完整教程18 -- 升级分布视图至 View Component

    之前我们详细介绍过分布视图(partial view),在有一些更加复杂的场景下,.net core为我们提供了更加强大的组件 view  component, 可以认为view component是 ...

  2. MVC + EFCore 项目实战 - 数仓管理系统2- 搭建基本框架配置EFCore

    本次课程就正式进入开发部分. 首先我们先搭建项目框架,还是和之前渐进式风格保持一致,除必备组件外,尽量使用原生功能以方便大家理解. 开发工具:vs 2019 或以上 数据库:SQL SERVER 20 ...

  3. 开源题材征集 + MVC&EF Core 完整教程小结

    到目前为止,我们的MVC+EF Core 完整教程的理论部分就全部结束了,共20篇,覆盖了核心的主要知识点. 下一阶段是实战部分,我们将会把这些知识点串联起来,用10篇(天)来完成一个开源项目. 现向 ...

  4. MVC+EFCore 项目实战-数仓管理系统1

    项目背景及需求说明 这是一个数据管理"工具类"的系统,计划有三个核心功能: 1.通过界面配置相关连接字符串,查询数据库的表数据. 2.配置相关模板,生成数据库表. 可以界面填报或通 ...

  5. MVC5+EF6 入门完整教程11--细说MVC中仓储模式的应用

    摘要: 第一阶段1~10篇已经覆盖了MVC开发必要的基本知识. 第二阶段11-20篇将会侧重于专题的讲解,一篇文章解决一个实际问题. 根据园友的反馈, 本篇文章将会先对呼声最高的仓储模式进行讲解. 文 ...

  6. ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解

    原文 ASP.NET MVC 5 学习教程:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details 方法 打开M ...

  7. ASP.NET + MVC5 入门完整教程七 -—-- MVC基本工具(上)

    https://blog.csdn.net/qq_21419015/article/details/80474956 这里主要介绍三类工具之一的 依赖项注入(DI)容器,其他两类 单元测试框架和模仿工 ...

  8. ASP.NET + MVC5 入门完整教程三 (下) ---MVC 松耦合

    建立松耦合组件 MVC 模式最重要的特性之一视他支持关注分离,希望应用程序中的组件尽可能独立,只有很少的几个可控依赖项.在理想的情况下,每个组件都不了解其他组件,而只是通过抽象接口来处理应用程序的其他 ...

  9. Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。

    系列目录 1.Taurus.MVC WebAPI  入门开发教程1:框架下载环境配置与运行. 2.Taurus.MVC WebAPI 入门开发教程2:添加控制器输出Hello World. 3.Tau ...

随机推荐

  1. Python之爬虫有感(一)

    urllib.request.Request('URL',headers = headers)User-Agent 是爬虫和反爬虫斗争的第一步,发送请求必须带User—Agent使用流程:    1. ...

  2. java学习笔记(基础篇)—面向对象编程之封装、继承、多态

    一. OOP中的基本概念 Java的编程语言是面向对象的,采用这种语言进行编程称为面向对象编程(Object-Oriented Programming, OOP), 它允许设计者将面向对象设计实现为一 ...

  3. 解决FileExplorer窗口变小问题

    3.解决FileExplorer窗口变小问题 须在$HOME/.vimrc中添加: "解决FileExplorer窗口变小问题 let g:bufExplorerMaxHeight=30 l ...

  4. JAVA通过URL链接获取视频文件信息(无需下载文件)

    最近项目碰到一个大坑:APP上需要在获取视频列表时就获取视频的时长,但早期上传的时候数据库都没有保存这个数据,所以前段时间添加一个时长字段,在上传时手动输入视频时长,但是之前库中有上万条数据没这个信息 ...

  5. redis的下载与安装(linux版)

    redis的下载与安装(linux版) 1.下载路径 https://redis.io/download 2.上传到linux并且解压 3.进入解压之后的redis,并且make && ...

  6. window平台下 cmd 命令窗口的编码设置

    在WINDOWS上打开控制台界面,发现默认的编码是GBK,这样有时候写完的代码运行的时候就会出码,基于此,查阅各方资料,终于得出两种方案. 一.临时解决方案(只针对本次会话有效) 1. 打开控制台,输 ...

  7. 使用.net core基于Razor Pages开发网站一些工作笔记

    本文是在实践工作中遇到的一些问题记录,并给出是如何解决的,.net core已经升级到3.0版本了,其实在项目中很早就已经在使用.net core来开发后台接口了,正好有个网站项目,就使用了Razor ...

  8. Python 学习笔记 编程基础汇总000

    编程基础知识汇总000 1.计算机结构 2.编程语言分类 3.字符编码由来 计算机结构 计算机组成五大部件: 控制器.运算器.存储器.输入.输出 控制器(Controler):对程序规定的控制信息进行 ...

  9. zabbix3.4汉化

    1.管理员用户登入zabbix页面,更改语言为Chinese(zh_CN),点击Update 2.解决zabbix页面中文乱码 2.1在windows的C:\Windows\Fonts找到字体文件si ...

  10. Apache和Spring提供的StopWatch执行时间监视器

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...