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

news/2025/2/2 22:52:57 标签: .netcore

目录

配置系统

默认添加的配置提供者

加载命令行中的配置。

运行环境

读取方法

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;
}


http://www.niftyadmin.cn/n/5840344.html

相关文章

PostgreSQL技术内幕24:定时任务调度插件pg_cron

文章目录 0.简介1.基础知识2.pg_cron安装使用方式2.1 安装pg_cron2.2 使用方式 3.实现原理3.1 启动过程3.2 任务添加和管理3.3 调度过程3.4 执行原理 0.简介 pg_cron是PostgreSQL中的一个简单的基于cron的任务调度插件&#xff0c;本文将从其基础知识&#xff08;Linux中Cron的…

ArkTS语言介绍

文章目录 一、基本知识声明类型运算符语句函数函数声明可选参数Rest参数返回类型函数的作用域函数调用函数类型箭头函数(又名Lambda函数)闭包函数重载类字段方法构造函数可见性修饰符对象字面量抽象类接口接口属性接口继承抽象类和接口泛型类型和函数泛型类和接口泛型约束泛型…

交易股指期货有什么技巧吗?

交易股指期货有啥窍门呢&#xff1f;其实啊&#xff0c;追涨杀跌这招&#xff0c;虽然能挣点小钱&#xff0c;但风险也不小&#xff0c;一不小心就可能亏大了。我说的追涨杀跌&#xff0c;不是那种天天追着价格跑的小打小闹&#xff0c;而是要看大趋势&#xff0c;做宏观操作。…

深入理解Spring框架:从基础到实践

前言 Spring框架是一个开源的企业级应用开发框架&#xff0c;它为Java开发者提供了灵活的架构支持&#xff0c;特别是在依赖注入&#xff08;IOC&#xff09;和面向切面编程&#xff08;AOP&#xff09;方面。本文将通过具体的示例&#xff0c;带你从Spring框架的概述、IOC容器…

《AI大模型开发笔记》DeepSeek技术创新点

一、DeepSeek横空出世 DeepSeek V3 以颠覆性技术架构创新强势破局&#xff01;革命性的上下文处理机制实现长文本推理成本断崖式下降&#xff0c;综合算力需求锐减90%&#xff0c;开启高效 AI 新纪元&#xff01; 最新开源的 DeepSeek V3模型不仅以顶尖基准测试成绩比肩业界 …

java每日精进1.31(SpringSecurity)

在所有的开发的系统中&#xff0c;都必须做认证(authentication)和授权(authorization)&#xff0c;以保证系统的安全性。 一、基础使用 1.依赖 <dependencies><!-- 实现对 Spring MVC 的自动化配置 --><dependency><groupId>org.springframework.bo…

指针的进化—sizeof和strlen对比(字符串和字符数组的区分)

1.前言 如果你对各个数组的内容存放是什么没有个清晰的概念&#xff0c;对指针偏移之后的数量算不出来或者模棱两可&#xff0c;那么本篇就来详细介绍sizeof和strlen来具象化的显示数组的内容存放了多少内容&#xff0c;偏移量变化后的变化&#xff0c;这个数组进行运算后会不会…

c语言操作符(详细讲解)

目录 前言 一、算术操作符 一元操作符&#xff1a; 二元操作符&#xff1a; 二、赋值操作符 代码例子&#xff1a; 三、比较操作符 相等与不相等比较操作符&#xff1a; 大于和小于比较操作符&#xff1a; 大于等于和小于等于比较操作符&#xff1a; 四、逻辑操作符 逻辑与&…