gpt4 book ai didi

azure - 如何在 Program.cs 中检索 Azure 应用程序配置服务设置

转载 作者:行者123 更新时间:2023-12-03 05:27:03 24 4
gpt4 key购买 nike

我正在使用部署为 Azure 应用服务的 Asp.NET Core 5 (v5.0.6) Web API,并且我正在从 API 中使用 appsettings.json 迁移到与 Azure 应用配置服务集成。我已设置 Azure 应用程序配置服务,但我遇到的问题是如何在我仍在 Program.cs 中时访问 Azure 应用程序配置服务中的值以检索数据库访问的连接字符串。

请注意,在 CreateHostBuilder() 方法中,我正在检查 context.HostingEnvironment.IsDevelopment() 环境变量,如果它是“IsDevelopment”,则意味着本地 DEV,我正在通过用户 key 读取 Azure 应用程序配置服务连接字符串但如果它不是本地 DEV,那么我依赖托管身份并只需从 appsettings.json 传入端点值。

我想要获取的唯一不在 Azure 应用程序配置服务中的值是本地 DEV Azure 应用程序配置服务连接字符串(来自用户 secret )和 Appsettings.json 中的 Azure 应用程序配置服务终结点。所有其他设置应来自 Azure 应用程序配置服务。

我试图解决的问题是如何在 Program.cs 中访问 Azure 应用程序配置服务中的值,以检索用于访问我用于日志记录的 Azure SQL 数据库的连接字符串。

在下面的代码中,当我在 CreateHostBuilderMethod 中链接 Azure 应用程序配置并调用构建时,我希望 Azure 应用程序配置服务中的值可以通过静态配置属性使用。但是,当我尝试检索连接字符串值时,它始终为空。

如何正确检索 Azure 应用程序配置服务中的属性值以在 Program.cs 中使用它们?

这是我的 Program.cs 文件;

public class Program
{
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true)
.AddUserSecrets<Startup>()
.Build();

public static void Main(string[] args)
{
var host = CreateHostBuilder(args)
.Build();

var connectionString = Configuration["CoreApi:Settings:LoggingDb"]; //<-- This returns null
const string tableName = "ApiLogs";

Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.Filter.ByExcluding(Matching.FromSource("Microsoft.EntityFrameworkCore.Query"))
.WriteTo.MSSqlServer(
connectionString: connectionString,
sinkOptions: new MSSqlServerSinkOptions { TableName = tableName })
.CreateLogger();

// TODO Enable to debug any startup Serilog issues. Make sure to comment out for PROD
// Serilog.Debugging.SelfLog.Enable(msg =>
// {
// Debug.Print(msg);
// Debugger.Break();
// });
//var host = CreateHostBuilder(args)
// .Build();

try
{
Log.Information("Starting ConfirmDelivery API");
host.Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "ConfirmDelivery API Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var settings = config.Build();
if (context.HostingEnvironment.IsDevelopment())
{
var connectionString = settings.GetConnectionString("AzureAppConfiguration");
config.AddAzureAppConfiguration(connectionString);
}
else
{
var endpoint = settings["AppConfigEndpoint"];
var credentials = new ManagedIdentityCredential();
config.AddAzureAppConfiguration(options =>
{
options.Connect(new Uri(endpoint), credentials);
});
}
}).ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});

}

最佳答案

尝试使用下面的代码来获取配置值:

using System;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.AzureAppConfiguration;


namespace myapp
{
class Program
{
static void Main(string[] args)
{
var configItemName = "";
var appConfigConnectionString = "";
var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(appConfigConnectionString);

var config = builder.Build();
Console.WriteLine(config[configItemName]);
}
}
}

结果:

enter image description here enter image description here

关于azure - 如何在 Program.cs 中检索 Azure 应用程序配置服务设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68073278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com