如何在Azure Function独立工作者DI配置中访问User Secrets值
解决方案
要在.NET 7 Azure Function独立工作者的DI配置环节直接访问User Secrets中的值,可按以下步骤操作:
安装必要NuGet包
确保项目已安装Microsoft.Extensions.Configuration.UserSecrets包,用于加载User Secrets配置。修改Program.cs配置
在HostBuilder中添加User Secrets配置提供程序,并在ConfigureServices中通过IConfiguration获取密钥:
var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() .ConfigureAppConfiguration((context, config) => { // 仅在开发环境加载User Secrets if (context.HostingEnvironment.IsDevelopment()) { // 关联当前项目的User Secrets config.AddUserSecrets<Program>(); } }) .ConfigureServices(services => { // 构建临时服务提供者并获取IConfiguration实例 var config = services.BuildServiceProvider().GetRequiredService<IConfiguration>(); string apiKey = config["apiKey"] ?? throw new InvalidOperationException("未配置apiKey"); // 注入依赖项时直接使用获取到的apiKey services.AddScoped<IMyDependency>(_ => new MyDependency(apiKey)); }) .Build(); host.Run();
关键说明
ConfigureAppConfiguration中通过AddUserSecrets<Program>()关联当前项目的User Secrets,确保机密内容被加载到配置系统中。- 在
ConfigureServices里,通过BuildServiceProvider()获取已配置的IConfiguration实例,从而直接读取apiKey的值。 - 加入环境判断,仅在开发环境加载User Secrets,避免生产环境误加载。
之前尝试无效的原因
Environment.GetEnvironmentVariable无法获取User Secrets的值,因为User Secrets不会自动同步到环境变量,必须通过配置系统访问。- 仅添加
AddUserSecrets但未通过IConfiguration读取,自然无法获取对应值。
内容的提问来源于stack exchange,提问作者nmpauls
相关产品推荐
相关产品推荐

