3、带你一步一步学习ASP.NET Core中的配置之Configuration
如果你是刚接触ASP.NET Core的学习的话,你会注意到:在ASP.NET Core项目中,看不到.NET Fraemwork时代中的web.config文件和app.config文件了。那么你肯定好奇,现在在ASP.NET Core应用程序中,是通过什么来配置我们的配置信息呢? 下面就跟着我一起来学习了解吧,在ASP.NET Core中是如何配置我们的配置信息,如果读取配置信息的。
在ASP.NET Core 中是使用一个或者多个配置提供程序来配置我们的应用程序的。配置提供程序可以从各种不同的配置源中,读取我们配置的信息,这些配置源有下面这些:
在这篇文章中,我将带领大家学习,如何通过JSON、INI、XML文件来配置、读取我们的配置信息,同样在这里面我还会教大家一种通用的方式,读取配置信息,它就是:使用自定义类来读取配置信息,这种方式叫做选项模式读取配置信息。
首先我们来看看ASP.NET Core中的默认的配置吧,我们新建一个空白的ASP.NET Core应用程序,名字这里我取:MyConfiguration,框架选择当前最新的.net 5.0.





可以看到默认生成了5个文件和一个文件夹properties,分别是:appsettings.json、appsettings.Development.json、Program.cs、Startup.cs,还有一个名字为Properties的文件夹,里面有一个launchSettings.json文件。
我们来先看一看,Program.cs文件:

Program.cs文件中有两个方法,一个是我们熟悉的Main函数,一个是CreateHostBuilder函数。CreateHostBuilder函数为我们创建了主机。然后在Main函数中调用这个CreateHostBuilder方法,也就是程序启动就会创建主机。
CreateHostBuilder为我们的应用程序提供了默认的配置,这些默认的配置的顺序如下:
需要牢牢记在脑海中的是:在上面6个配置提供程序中,后出来的配置,会重写之前的配置。例如:如果我们在appsetting.json以及appsetting.Environment.json文件中,为同一个配置,都设置了值,那么appsetting.Environment.json文件中,设置的这个值将会被使用。使用默认的配置提供程序的顺序,那么命令行配置提供程序将会重写所有在它之前的配置提供程序的配置。
想要连接更多关于CreateHostBuilder方法为我们做了什么,可以看这个微软官方文档:Default builder settings
这篇文章,我的重心就是带领大家学习如果通过文件配置提供程序来配置、读取我们的配置信息,也就是如何从JSON、INI、XML文件中读取配置信息。
从Json文件中读取配置信息
打开appsettings.json文件,添加如下配置信息:

同样在appsetting.Development.json文件中,加上类似的

现在我们要做的就是来读取这些配置信息。
首先空白的模板是没有控制器等文件夹的,我们要做的就是自己一步一步搭建好。
创建好一个Controllers文件夹,在里面新建一个空白的HomeController控制器。在Home控制器中写上如下代码:

Index视图代码:

然后打开Startup.cs文件,需要修改两处:

然后运行程序:

可以看到读取的配置信息是appsetting.Development.json文件中的。这是因为我们应用程序默认的环境就是设置的Development。

默认的JsonConfigurationProvider ,首先是从appsetting.json文件中读取配置,然后appsettings.Environment.json文件中的配置就会加载,然后就会重写了appsettings.json文件中的配置了。
如果我们把ASPNETCORE_ENVIRONMENT改成【Production】,再运行程序,就会发现:读取的是appsetting.json文件中的配置信息了,因为在这里,我们没有appsettings.Production.json文件。所以就会去读取appsettings.json文件。


这种方式,我们在程序运行的时候,修改appetttings.json文件,按回车键,会自动获取最新的配置。例如我们在运行的时候,修改一下appsettings.json文件:

可以看到最新的【不用重新运行,直接刷新网页就能获取最新的配置信息】:

使用选项模式读取应用程序的配置
如果你打算构建大型的应用程序,势必就会有很多的配置信息。或者当你有很多层级的配置信息需要去读取,像上面例子那样,通过Configuration和冒号一个一个的读取方式是不可取的。并且还有机会,因为错误的拼写,导致你读取配置的时候发生异常。推荐读取配置的方式就是使用选项模式。
选项模式使用类,来提供对配置信息进行强类型的读取。废话不多说,我们开干!
新建一个Common文件夹,新建一个类叫做ApplicationOptions,写上这些代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace MyConfiguration.Common
{
public class ApplicationOptions
{
/// <summary>
/// 配置中的MyApplication键值
/// </summary>
public const string MyApplication = "MyApplication";
/// <summary>
/// 配置文件中的Name
/// </summary>
public string Name { get; set; }
/// <summary>
/// 配置文件中的Version
/// </summary>
public string Version { get; set; }
public string DefaultUrl { get; set; }
/// <summary>
/// 配置中的Support子节点
/// </summary>
public SupportOption Support { get; set; }
}
/// <summary>
/// SupportOption
/// </summary>
public class SupportOption
{
public const string Support = "Support";
/// <summary>
/// 配置中的Email
/// </summary>
public string Email { get; set; }
/// <summary>
/// 配置中的Phone
/// </summary>
public string Phone { get; set; }
}
}
我们需要时刻铭记的是:当我们使用选项模式的时候,我们需要创建一个类,定义一些字段和属性来读取配置文件中的信息:
为了绑定我们的配置,我们需要调用ConfigurationBinder.Bind方法,具体做法如下:

然后我们运行程序:

我们直接修改一下appsettings.json文件:

然后刷新页面:
可以看到不用停止程序,直接修改json配置文件,便直接可以读取最新修改的配置信息。
另外上面的代码,我们是通过:IConfiguration.Bind方法绑定的,还可以使用Get方法绑定。

我们可以这样:上面两句代码,可以用下面这一行代替。运行的结果也是一样的。


修改一下appsettings.json文件:

然后刷新一下页面,也获取到了最新修改后的配置信息:

使用依赖注入,注入我们的ApplicationOptions类
在上面所有的例子中,我都是直接在一个标准的控制器中读取我们的配置信息,如果你有一个大型的应用程序,需要在不同的控制器中读取配置信息,我们该怎么做呢?难道在每一个控制器中都写重复的读取配置的代码么?推荐的方式是在Stratup.cs文件中的ConfigureServices方法中,使用依赖注入的方式,注入我们的选项模式的自定义类。请看下面的代码:


运行程序:

修改一下配置文件:刷新页面,发现还是没有变化,没有获取最新的1.3版本和最新的Email信息。

除非重新关闭程序,重新运行程序:才能获取最新的配置信息,所以这种依赖注入的方式,就这点毛病,需要重启一下程序。

使用XML配置提供程序
我们有这样的一个XML文件:

Program类:我们做如下修改

控制器类:

运行程序:读取到了XML中的配置信息。

修改一下XML文件

刷新页面获取到了最新的XML配置:

使用INI配置提供程序
INI文件如下:

Program类中代码:

控制器中代码:

运行程序:读取到了INI文件中的配置信息了。

好了,以上就是ASP.NET Core中如何读取配置信息的内容,后面两种XML和INI读取配置的方式,因为篇幅的原因,就只是粘贴了核心代码,相信大家也能看得懂。希望我的这篇文章能够帮到你 ,如果觉得我写的不错,可以点个赞,帮忙分享,转载,请注明原文链接,谢谢合作。我是灰太狼的梦想,一个自强不息,脚踏实地的程序猿。
3、带你一步一步学习ASP.NET Core中的配置之Configuration的更多相关文章
- ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置
前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...
- 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- 学习ASP.NET Core Razor 编程系列六——数据库初始化
学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...
- C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面
C#中的函数式编程:递归与纯函数(二) 在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(上)
学习ASP.NET Core Blazor编程系列一--综述 一.概述 Blazor 是一个生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建信息丰富的交互式 U ...
- 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)
学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...
- 从明面上学习ASP.NET Core
一.前言 这篇文章就是从能看到地方去学习Core,没有很深奥,也没有很难懂,现在我们开始吧. 二.构建项目,引发思考 创建项目的步骤真的很简单,你要是不会,我真也没法了,我这是创建的M ...
- C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入
C# 嵌入dll 在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...
随机推荐
- 测试成长记录:python调adb无法获取设备信息bug记录
背景介绍: 一直在负责公司Android自动化的编写工作,采用的是uiautomator2,需要获取设备id来连接设备,就是 adb devices 问题描述: 之前一直用 subprocess.ch ...
- jQuery实现全网热播视频
<section id="play"> <h1>全网热播视频</h1> <ul> <li><img src=&qu ...
- 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针. package com.walegarrett.offer; /** * @Aut ...
- C++ 中的虚函数表及虚函数执行原理
为了实现虚函数,C++ 使用了虚函数表来达到延迟绑定的目的.虚函数表在动态/延迟绑定行为中用于查询调用的函数. 尽管要描述清楚虚函数表的机制会多费点口舌,但其实其本身还是比较简单的. 首先,每个包含虚 ...
- calcite 概念和架构
1. 前言 Flink使用Calcite构造SQL引擎,那么他们 是怎么合作的? drill, hive,storm 和其他的一干apache 大数据引擎也用calcite , 那么对于同一个sql ...
- 翻译:《实用的Python编程》04_02_Inheritance
目录 | 上一节 (4.1 类) | 下一节 (4.3 特殊方法) 4.2 继承 继承(inheritance)是编写可扩展程序程序的常用手段.本节对继承的思想(idea)进行探讨. 简介 继承用于特 ...
- Python3读取网页HTML代码,并保存在本地文件中
旧版Python中urllib模块内有一个urlopen方法可打开网页,但新版python中没有了,新版的urllib模块里面只有4个子模块(error,request,response,parse) ...
- DataFocus小学堂|客户分析之复活客户分析
复活客户分析 什么是"复活客户"?如何进行"复活客户分析"呢?今天,我们借助DataFocus系统,来了解一种简单的复活客户分析. 1.何为复活客户 复活客户, ...
- 从零学脚手架(五)---react、browserslist
如果此篇对您有所帮助,在此求一个star.项目地址: OrcasTeam/my-cli react react介绍 目前,国内主流的前端应用框架具有两个:vue.js和react.js,关于vue和r ...
- 运用arcgis将标签图片(栅格图)转换为shp矢量文件
最近在做图像分割校正,需要将ecognition分割好的shp文件做优化,但是如果直接对shp文件修改非常不友好,可以先对导出的tif标签图进行修改,然后将修改后的标签图转换为新的shp文件进行输出. ...