.Net Core 学习之路-基础

.Net Core出来好久了,一直在了解,但始终没有应用到实际项目中....

准备用.net core搞个SSO,才发现它和.net framework的变化并不是一点点...

.net core还在学习摸索中,这篇文章就遇到的问题记录一下,希望对需要的人有所帮助

环境变量

.Net Core包含一个launchSettings.json的文件,在项目的Properties"文件夹下

本地计算机开发环境中,这个文件设置了.net core不同运行环境中每个变量的值

在生产环境中,设置环境的方法取决于操作系统而不是此文件了

我们可以通过配置环境变量启用或禁用应用程序部分功能

在Startup.cs 的 Configure函数中可通过IHostingEnvironment来获取当前环境变量的配置

配置项读写

WebHost.CreateDefaultBuilder(args) 这段代码会加载默认配置项,同时也可能启用部分服务

加载顺序为:

appsettings.json。

appsettings.{Environment}.json。

应用在 Development 环境中运行时的用户机密。(secrets.json)

环境变量。(launchSettings.json)

命令行参数。

读取配置项

以下面的appsettings设置为例:

{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "App": { "ConnectionStrings": { "RwViewSQLConnString": "server=*;Initial Catalog=*;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=300;", "RoViewSQLConnString": "server=*;Initial Catalog=*;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=300;" }, "AppSettings": { "SqlHelperNonQueryCommandTimeout": 30, "SqlHelperQueryCommandTimeout": 30 } } }

读取单个节点: Configuration.GetSection("App:ConnectionStrings:RwViewSQLConnString")

将节点绑定到实体数据模型:Configuration.GetSection("App").Bind(new ConfigOptions());

在类库中获取IConfiguration:

var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); ApplicationEnvironment env = PlatformServices.Default.Application; IConfiguration Configuration = builder.Build();

也可以用ioc的注入从构造函数中获取,不过着实不方便,更建议建一个静态类来保存全局配置

可以监听配置文件的改变事件来重新绑定实体模型:

Configuration.GetReloadToken().RegisterChangeCallback(OnSettingChanged, Configuration); public void OnSettingChanged(object state) { callbackRegistration?.Dispose(); IConfiguration configuration = (IConfiguration)state; configuration.GetSection("App").Bind(new ConfigOptions()); callbackRegistration = configuration.GetReloadToken() .RegisterChangeCallback(OnSettingChanged, state); } 按环境配置

我们可以通过设置 launchSettings.json文件中对应启动方式的ASPNETCORE_ENVIRONMENT值来设定程序的运行环境,官方只支持三个固定的值:Development、Staging 或 Production

appsettings.json会优先读取appsettings.{Environment}.json中设定的值

用户机密

按照我们以往的习惯,可能习惯于将之前存在web.config中的配置项转移到 appsettings.json 中存储,但是对于数据库连接字符串等加密信息如今.net core不太建议我们通过这种方式来存储

开发环境中它提供了另一种存储方式:机密管理器

实际上是将密码的配置存储到本地电脑的一个json文件当中,这个文件存储的位置与操作系统和服务器的登陆用户有关。

这种做法的好处总结为下两点:

将机密文件与项目源代码分离,提高安全性

以连接字符串为例,如果多人开发的情况,每个人可能用到的链接不同,避免的多人都在更改同一个配置文件,上传时还要还原的繁琐

下面介绍下机密管理器的使用方式:

安装nuget包:

Microsoft.Extensions.Configuration.UserSecrets

Microsoft.VisualStudio.Web.CodeGeneration.Tools

第一个包用于配置机密文件 第二个用于读取配置

此时查看项目的工程文件(*.csproj),可以看到多出来一个UserSecretsId节点的配置,类似于下面这样:

<UserSecretsId>79bbf988-8542-4789-a63e-d4a3588c64a3</UserSecretsId>

在vs中我们可以右键项目->Manage User Secrets 编辑机密文件:

{ "App": { "ConnectionStrings": { "RwViewSQLConnString": "server=*;Initial Catalog=*;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=300;", "RoViewSQLConnString": "server=*;Initial Catalog=*;Persist Security Info=True;User ID=sa;Password=123456;Connect Timeout=300;" }, "AppSettings": { "SqlHelperNonQueryCommandTimeout": 40, "SqlHelperQueryCommandTimeout": 40 } } }

我们再一次读取 configuration.GetSection("App").Bind(new ConfigOptions()); 中的配置项就会以 User Secrets中的配置为准

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwpys.html