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,这种形 ...
随机推荐
- 更改EFI分区位置
我是win10 + arch 双系统,并且efi分区用的是win10自动创建的(大小100m),所以这些空间很快就不够用了(内核和initramfs都放在了ESP分区当中) 我原本是直接把win的ef ...
- js一周时间表
<div class="datetext"> <img class="dateLeft" src="./images/dateLef ...
- python类属性
类属性 类属性分为共有属性和私有属性. 私有属性的定义方法eg:__age(若无次定义则默认为公有属性) 类属性举例: class people: name = "china" _ ...
- JWT加密解密方法
public static string Key { get; set; } = "123456789987654321";//解密串 /// <summary> // ...
- 《逆向工程核心原理》——API HOOK
编写dll处理hook逻辑,注入到目标进程,实现api hook. Windows10 notepad,通过hook kernel32.dll.WriteFile,实现小写字母转大写保存到文件. ho ...
- 3、MyBatis教程之CURD操作
4.CURD操作 1.查询 根据用户 Id查询用户 在UserMapper中添加对应方法 public interface UserMapper { List<User> getUserL ...
- 微信二维码引擎OpenCV开源研究
<微信二维码引擎OpenCV开源研究> 一.编译和Test测试 opencv_wechat_qrcode的编译需要同时下载opencv(https://github.com/ ...
- Android 之 使用 Intent 在活动间传递数据
•前言 继上次学习了<通过 Intent 完成点击按钮实现页面跳转>后,我们知道了如何通过 Intent 实现页面跳转: Intent 除了可以实现页面跳转外,还可以在跳转的时候传递数据: ...
- Android学习之异步消息处理机制
•前言 我们在开发 APP 的过程中,经常需要更新 UI: 但是 Android 的 UI 线程是不安全的: 如果想更新 UI 线程,必须在进程的主线程中: 这里我们引用了异步消息处理机制来解决之一问 ...
- 【linux】命令-网络相关
目录 前言 1. ifconfig 1.1 语法 1.2 参数说明 1.3 例程 2. iw 2.1 扫描可用无线网络 2.2 WiFi连接步骤(教程A) 2.2.1 查看可以用无线设备信息 2.2. ...