管理员
2026-09-21
使用 Secret Manager
8次阅读
0
0

在 .NET 开发中,管理 Secret(如 API Key、数据库密码)和环境变量是必备技能。结合你日常在 Visual Studio 中构建 .NET 项目、Docker 集成发布以及 Linux 服务器部署的场景,以下是完整配置教程:

一、开发环境:使用 Secret Manager(用户机密)

开发阶段绝对不要把敏感信息硬编码在代码里或提交到 Git,推荐使用 .NET 自带的 Secret Manager 工具。

1. 初始化用户机密

在 Visual Studio 中右键点击项目,选择 "管理用户机密",会自动在 .csproj 中生成 UserSecretsId。或者在项目根目录执行命令:


dotnet user-secrets init

2. 添加/设置机密

使用 CLI 命令设置键值对(支持冒号 : 表示层级结构):

机密实际存储在本地 JSON 文件中(Windows 路径:%APPDATA%\Microsoft\UserSecrets\<UserSecretsId>\secrets.json),完全脱离项目目录,不会被 Git 追踪。


var builder = WebApplication.CreateBuilder(args);
var openAIKey = builder.Configuration["OpenAI:ApiKey"];
var dbPassword = builder.Configuration["Database:Password"];
优先级:User Secrets > appsettings.json,同名配置会自动覆盖。



二、环境变量配置

Linux/macOS(当前会话):

export ASPNETCORE_ENVIRONMENT=Production 
export DB_CONNECTION_STRING="Server=localhost;Database=MyDB;User=sa;Password=P@ssw0rd;"

Docker(docker run 或 Dockerfile):


  • bash编辑
  • docker run -e ASPNETCORE_ENVIRONMENT=Production -e DB_CONNECTION_STRING="..." myappdockerfile编辑ENV ASPNETCORE_ENVIRONMENT=Production
  • Kubernetes:在 Deployment YAML 的 env 字段中定义。

2. 代码中读取环境变量

var builder = WebApplication.CreateBuilder(args);
// WebApplication.CreateBuilder 默认已加载环境变量
var env = builder.Configuration["ASPNETCORE_ENVIRONMENT"];
var connStr = builder.Configuration["DB_CONNECTION_STRING"];
注意:环境变量中的层级键需用双下划线 __ 代替冒号(如 OpenAI__ApiKey),框架会自动转换。


三、环境判断与配置加载优先级

1. 环境判断

ASP.NET Core 通过 ASPNETCORE_ENVIRONMENT 或 DOTNET_ENVIRONMENT 环境变量判断当前环境,框架预置了三个值:Development、Staging、Production(未设置时默认为 Production)。

代码中判断环境:

if (app.Environment.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

2. 配置加载优先级(从高到低)

  1. 命令行参数
  2. 环境变量
  3. User Secrets(仅 Development 环境)
  4. appsettings.{Environment}.json(如 appsettings.Production.json)
  5. appsettings.json


四、生产环境最佳实践

  • Linux 服务器部署:通过 Supervisor 管理 .NET 进程时,在 Supervisor 配置文件的 environment 字段中注入环境变量,实现配置与代码分离。
  • 云/容器部署:部署到 Azure App Service、Docker、K8s 时,直接使用平台提供的环境变量或密钥管理服务(如 Azure Key Vault),无需修改代码。
  • CI/CD:在流水线中通过 Secret 注入环境变量,避免密钥进入代码库。
  • 永远不要将 secrets.json 或包含真实密钥的 appsettings.json 提交到 Git。建议在 .gitignore 中添加 appsettings.Development.json,并在 appsettings.json 中保留占位值提示其他开发者。
表情
图片

暂无评论~

目录 收起
▾一、开发环境:使用 Secret Manager(用户机密)
1. 初始化用户机密
2. 添加/设置机密
▾二、环境变量配置
2. 代码中读取环境变量
▾三、环境判断与配置加载优先级
1. 环境判断
2. 配置加载优先级(从高到低)
四、生产环境最佳实践
推荐文章
uniapp-v1.2.0更新
1点赞83阅读
使用 Secret Manager
0点赞8阅读
linux服务器定时更新GitHub dns
0点赞10阅读
2026-07-23更新日志
0点赞199阅读
docker使用
0点赞32阅读
2026-05-26更新日志
0点赞51阅读
PC端会员版更新内容
0点赞48阅读
2026-4-22更新日志
1点赞77阅读
2025年6月15日更新内容
1点赞254阅读
移动端vue3-1.1.5更新
0点赞355阅读
移动端体验