ASP.NET Core与配置系统的集成

目录

配置系统

默认添加的配置提供者

加载命令行中的配置。

运行环境

读取方法

User Secrets

注意事项

Zack.AnyDBConfigProvider

案例


配置系统

默认添加的配置提供者

  1. 加载现有的IConfiguration。
  2. 加载项目根目录下的appsettings.json。
  3. 加载项目根目录下的appsettings.{Environment}.json。
  4. 当程序运行在开发环境下,程序会加载“用户机密”配置。
  5. 加载环境变量中的配置。
  6. 加载命令行中的配置。

运行环境

ASP.NET Core 会从环境变量中读取名字为ASPNETCORE_ENVIRONMENT的值。推荐值:Development(开发环境)、Staging(测试环境)、Production(生产环境)。

读取方法

app.Environment.EnvironmentName、app.Environment.IsDevelopment()……

[HttpGet]
public string Test()
{
    return Environment.GetEnvironmentVariable("haha");
}
Program
app.Environment.IsDevelopment()

Controller
private readonly IWebHostEnvironment webHostEnvironment;

[HttpGet]
public string Test()
{
    return webHostEnvironment.EnvironmentName;
}

User Secrets

  1. 把不方便放到appsettings.json中的机密信息放到一个不在项目中的json文件中。
  2. 在ASP.NET Core项目上单击鼠标右键,选择【管理用户机密】。
  3. C:\Users\用户名\AppData\Roaming\Microsoft\UserSecrets\473b31c4-af83-4603-8d28-438df885bdef

注意事项

  1. 供开发人员使用的,不适合在生产环境中使用。
  2. 仍然是明文存储。不想别人看到怎么办?Azure Key Vault、Zack.AnyDBConfigProvider等。无法完全避免。加强安全防控更重要。
  3. 如果因为重装、新员工等原因导致secrets.json重建,就要重新配置,麻烦。如果影响大的话,还是用集中式配置服务器。

Zack.AnyDBConfigProvider

https://github.com/yangzhongke/Zack.AnyDBConfigProviderhttps://github.com/yangzhongke/Zack.AnyDBConfigProviderhttps://github.com/yangzhongke/Zack.AnyDBConfigProviderhttps://github.com/yangzhongke/Zack.AnyDBConfigProvider

案例

  1. 系统的主要配置(Redis、Smtp)放到配置专用的数据库中。Zack.AnyDBConfigProvider
  2. 连接配置数据库的连接字符串配置在“用户机密”中。"Data Source=.;Initial Catalog=demo1;Integrated Security=SSPI;"
  3. 把Smtp的配置显示到界面上。
  4. 程序启动的时候就连接Redis,并且把Redis连接对象注册到依赖注入系统中。
secrets.json:
{
  "connStr": "Data Source=.;Initial Catalog=demo1;Integrated Security=SSPI;TrustServerCertificate=true;"
}

public record SmtpSettings()
{
    public string Server { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
}

program.cs:
//从数据库动态加载配置
builder.Host.ConfigureAppConfiguration((hostCtx, configBuilder) =>
{
    //配置中读取名为"ConnStr"的连接字符串
    string connStr = builder.Configuration.GetSection("ConnStr").Value;
    //添加数据库配置源
    configBuilder.AddDbConfiguration(() => new SqlConnection(connStr), reloadOnChange: true, reloadInterval: TimeSpan.FromSeconds(2));
});
builder.Services.Configure<SmtpSettings>(builder.Configuration.GetSection("Smtp"));
//添加Redis配置源
builder.Services.AddSingleton<IConnectionMultiplexer>(sp =>
{
    //在Program.cs中读取配置的一种方法
    string constr = builder.Configuration.GetSection("Redis").Value;
    return ConnectionMultiplexer.Connect(constr);
});

Controller:
private readonly IOptionsSnapshot<SmtpSettings> optSmtp;
private readonly IConnectionMultiplexer connectionMultiplexer;

public Test(IOptionsSnapshot<SmtpSettings> optSmtp, IConnectionMultiplexer connectionMultiplexer)
{
    this.optSmtp = optSmtp;
    this.connectionMultiplexer = connectionMultiplexer;
}

[HttpGet]
public string Demo1()
{
    var ping = connectionMultiplexer.GetDatabase(0).Ping();
    return optSmtp.Value.ToString() + ":" + ping;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/963595.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c++可变参数详解

目录 引言 库的基本功能 va_start 宏: va_arg 宏 va_end 宏 va_copy 宏 使用 处理可变参数代码 C11可变参数模板 基本概念 sizeof... 运算符 包扩展 引言 在C编程中&#xff0c;处理不确定数量的参数是一个常见的需求。为了支持这种需求&#xff0c;C标准库提供了 &…

Q#使用教程

Q# 是一种用于量子计算的编程语言&#xff0c;主要用于编写量子算法。 1. 环境配置 安装vscode2017以上 QDK下载地址&#xff1a;Azure Quantum Development Kit (QDK) - Visual Studio Marketplace 将下载好的QDK作为拓展配置到vscode里面。 2.代码 import Microsoft.Qu…

万字长文深入浅出负载均衡器

前言 本篇博客主要分享Load Balancing&#xff08;负载均衡&#xff09;&#xff0c;将从以下方面循序渐进地全面展开阐述&#xff1a; 介绍什么是负载均衡介绍常见的负载均衡算法 负载均衡简介 初识负载均衡 负载均衡是系统设计中的一个关键组成部分&#xff0c;它有助于…

云原生(五十三) | SQL查询操作

文章目录 SQL查询操作 一、数据库DDL操作 1、登陆数据库 2、创建DB数据库 二、数据表DDL操作 1、创建数据表 2、RDS中SQL查询操作 三、SQL查询操作 1、RDS中SQL查询操作 SQL查询操作 一、数据库DDL操作 1、登陆数据库 2、创建DB数据库 创建一个普通账号&#xff0c…

potplayer字幕

看视频学习&#xff0c;实时字幕可以快速过滤水字数阶段&#xff0c;提高效率&#xff0c;但是容易错过一些信息。下面就是解决这一问题。 工具ptoplayer 一.生成字幕 打开学习视频&#xff0c;右键点击视频画面&#xff0c;点选字幕。勾选显示字幕。点选创建有声字幕&#…

TensorFlow简单的线性回归任务

如何使用 TensorFlow 和 Keras 创建、训练并进行预测 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 8.完整代码 1. 数据准备与预处理 我们将使用一个简单的线性回归问题&#xff0c;其中输入特征 x 和标…

langchain基础(二)

一、输出解析器&#xff08;Output Parser&#xff09; 作用&#xff1a;&#xff08;1&#xff09;让模型按照指定的格式输出&#xff1b; &#xff08;2&#xff09;解析模型输出&#xff0c;提取所需的信息 1、逗号分隔列表 CommaSeparatedListOutputParser&#xff1a;…

docker安装MySQL8:docker离线安装MySQL、docker在线安装MySQL、MySQL镜像下载、MySQL配置、MySQL命令

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull mysql:8.0.41 2、离线包下载 两种方式&#xff1a; 方式一&#xff1a; -&#xff09;在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -&#xff09;导出 # 导出镜…

【MySQL】语言连接

语言连接 一、下载二、mysql_get_client_info1、函数2、介绍3、示例 三、其他函数1、mysql_init2、mysql_real_connect3、mysql_query4、mysql_store_result5、mysql_free_result6、mysql_num_fields7、mysql_num_rows8、mysql_fetch_fields9、mysql_fetch_row10、mysql_close …

建表注意事项(2):表约束,主键自增,序列[oracle]

没有明确写明数据库时,默认基于oracle 约束的分类 用于确保数据的完整性和一致性。约束可以分为 表级约束 和 列级约束&#xff0c;区别在于定义的位置和作用范围 复合主键约束: 主键约束中有2个或以上的字段 复合主键的列顺序会影响索引的使用&#xff0c;需谨慎设计 添加…

本地缓存~

前言 Caffeine是使用Java8对Guava缓存的重写版本&#xff0c;在Spring Boot 2.0中取而代之&#xff0c;基于LRU算法实现&#xff0c;支持多种缓存过期策略。 以下摘抄于https://github.com/ben-manes/caffeine/wiki/Benchmarks-zh-CN 基准测试通过使用Java microbenchmark ha…

视觉状态空间模型(VMamba)的解读

在计算机视觉领域&#xff0c;设计计算高效的网络架构一直是研究的热点。今天&#xff0c;我想和大家分享一篇发表在 NIPS 2024 上的论文——VMamba&#xff1a;Visual State Space Model&#xff0c;这篇论文提出了一种新的视觉骨干网络&#xff0c;具有线性时间复杂度&#x…

Kanass基础教程-创建项目

Kanass是一款国产开源免费的项目管理工具&#xff0c;工具简洁易用&#xff0c;开源免费&#xff0c;之前介绍过kanass的一些产品简介及安装配置方法&#xff0c;本文就从如何创建第一个项目来开始kanass上手之旅吧。 1. 创建项目 点击项目->项目添加 按钮进入项目添加页面…

问题的价值 ( Value of Question ) 公式

一、什么是问题的价值 我们的人生、工作的期间、瞬息万变的商业环境中&#xff0c;我们必然会面对很多问题&#xff0c;也会提出很多问题。 但这些问题是否具有回答的 价值&#xff0c;应该如何 衡量 呢&#xff1f; 简单如&#xff0c;女朋友问今晚应该吃什么、世界如何才能…

Zemax 中带有体素探测器的激光谐振腔

激光谐振腔是激光系统的基本组成部分&#xff0c;在光的放大和相干激光辐射的产生中起着至关重要的作用。 激光腔由两个放置在光学谐振器两端的镜子组成。一个镜子反射率高&#xff08;后镜&#xff09;&#xff0c;而另一个镜子部分透明&#xff08;输出耦合器&#xff09;。…

在GPIO控制器中,配置通用输入,读取IO口电平时,上拉和下拉起到什么作用

上下拉电阻作用 在通用输入的时候&#xff0c;也就是在读某个IO的电平的时候 一定要让IO口先保持一个电平状态&#xff0c;这样才能检测到不同电平状态。 如何保持电平状态&#xff1f; 1. 可以通过芯片内部的上下拉电阻&#xff0c;由于是弱上下拉一般不用 2. 硬件外界一个…

如何使用 DeepSeek 和 Dexscreener 构建免费的 AI 加密交易机器人?

我使用DeepSeek AI和Dexscreener API构建的一个简单的 AI 加密交易机器人实现了这一目标。在本文中&#xff0c;我将逐步指导您如何构建像我一样的机器人。 DeepSeek 最近发布了R1&#xff0c;这是一种先进的 AI 模型。您可以将其视为 ChatGPT 的免费开源版本&#xff0c;但增加…

SAP HCM insufficient authorization, no.skipped personnel 总结归纳

导读 权限:HCM模块中有普通权限和结构化权限。普通权限就是PFCG的权限&#xff0c;结构化权限就是按照部门ID授权&#xff0c;颗粒度更细&#xff0c;对分工明细化的单位尤其重要&#xff0c;今天遇到的问题就是结构化权限的问题。 作者&#xff1a;vivi&#xff0c;来源&…

python-leetcode-二叉树的右视图

199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solut…

冲刺一区!挑战7天完成一篇趋势性分析GBD DAY1-7

Day1. 公开数据库的挖掘太火热了,其中GBD数据库的挖掘又十分的火爆.那我就来挑战一篇GBD、一篇关于趋势性分析的GBD&#xff01; GBD数据库挖掘是目前的四大刊常客&#xff0c;经常出现在顶级期刊上面。这个数据库亮点就是&#xff1a;可视化&#xff0c;统计学简单、而数据可…