当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/531612.html

相关文章:

  • 中间件的概念及基本使用
  • SpringBoot 整合 Mybatis:注解版
  • 18.[前端开发]Day18-王者荣耀项目实战(一)
  • Kafka 使用说明(kafka官方文档中文)
  • 基于多智能体强化学习的医疗AI中RAG系统程序架构优化研究
  • Airflow:深入理解Apache Airflow Task
  • multisim入门学习设计电路
  • 【算法精练】二分查找算法总结
  • 从零开始实现一个双向循环链表:C语言实战
  • MYSQL面试题总结(题目来源JavaGuide)
  • visual studio安装
  • JVM执行引擎
  • C# 9.0记录类型:解锁开发效率的魔法密码
  • 搭建自己的专属AI——使用Ollama+AnythingLLM+Python实现DeepSeek本地部署
  • 『 C++ 』中理解回调类型在 C++ 中的使用方式。
  • git多人协作
  • CTFSHOW-WEB入门-命令执行71-77
  • 浅谈《图解HTTP》
  • LLMs瞬间获得视觉与听觉感知,无需专门训练:Meta的创新——在图像、音频和视频任务上实现最优性能。
  • 自研有限元软件与ANSYS精度对比-Bar3D2Node三维杆单元模型-央视大裤衩实例
  • kubernetes 高可用集群搭建
  • 【C++】STL——vector底层实现
  • 数据结构初探:链表之单链表篇
  • 介绍一下Mybatis的底层原理(包括一二级缓存)
  • Linux基础 ——tmux vim 以及基本的shell语法
  • 64位的谷歌浏览器Chrome/Google Chrome
  • jetson编译torchvision出现 No such file or directory: ‘:/usr/local/cuda/bin/nvcc‘
  • 多线程创建方式三:实现Callable接口
  • Linux下的编辑器 —— vim
  • Docker技术相关学习二