繁体   English   中英

how to read azure app config values in C# startup.cs class in azure function

[英]how to read azure app config values in C# startup.cs class in azure function

我在 Azure 应用程序配置中添加了键值对,并尝试在 Startup.cs class 文件中读取它。 请建议如何做到这一点。

public class Startup : FunctionsStartup
{
    private static readonly string url= "*******************";
   
    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        string connectionString=????? //How to get this value from Azure app config
        builder.Services.AddDbContext<DbContext, Context>(
            options => SqlServerDbContextOptionsExtensions.UseSqlServer(options, connectionString));
       builder.ConfigurationBuilder.AddAzureAppConfiguration(url);
    }
}

您需要将配置的配置与应用程序服务的注册分开。 换句话说,Azure App Configuration 的设置应该在ConfigureAppConfiguration中完成,而DbContext的注册应该在Configure方法中完成。 这将允许您在Configure方法中访问FunctionsHostBuilderContextConfiguration属性以检索您的连接字符串:

public class Startup : FunctionsStartup
{
    private static readonly string url= "*******************";
   
    public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
    {
        // register AzureAppConfiguration only
        builder.ConfigurationBuilder.AddAzureAppConfiguration(url);
    }

    public override void Configure(IFunctionsHostBuilder builder)
    {
        var context = build.GetContext();
        var config = context.Configuration;

        string connectionString = config["AzureAppConfigKeyName"];
        builder.Services.AddDbContext<DbContext, Context>(
            options => SqlServerDbContextOptionsExtensions.UseSqlServer(options, connectionString)
        );
    }
}

您传递给config object 的索引器的值将取决于您在 Azure 应用程序配置中命名您的密钥的名称。 假设您将其称为“DatabaseConnectionString”,那么这正是您要传递的内容,即: config["DatabaseConnectionString"]

前缀

Azure 应用程序配置有一些功能可以控制应用程序如何处理键名,特别是“修剪前缀”的能力。 您在这里没有使用它(因为您只是传递 URL),但假设您在 Azure 应用程序配置中有键,例如MyFunction:DatabaseConnectionString 默认情况下,您将使用它的全名访问它:

var cs1 = config["MyFunction:DatabaseConnectionString"];
// or
var cs2 = config.GetSection("MyFunction")["DatabaseConnectionString"];

但是,您可以指定长格式连接选项。 这将只允许您使用以该前缀开头的 select 键,并且可以选择将它们修剪掉:

builder.ConfigurationBuilder.AddAzureAppConfiguration(s => 
{
    s.Connect(url, new DefaultAzureCredential());
    s.Select("MyFunction:*");
    s.TrimKeyPrefix("MyFunction:");
});

现在,这将使您的连接字符串可以使用更短的密钥:

string connectionString = config["DatabaseConnectionString"];

如果您在 Azure 应用程序配置实例中有很多不同的设置并且只想拉入那些与您的应用程序特别相关的设置(标签也可用于此目的),则此功能特别有用。

Azure 应用程序配置连接 - 环境变量

最后,提个建议。 不要将url或 Azure 应用程序配置实例的连接详细信息硬编码在应用程序中。 为此使用环境变量。 Azure App Service/Azure Functions 中的“应用程序设置”会作为环境变量自动添加到您的应用程序中。

ConfigureAppConfiguration运行之前,已经将一组默认配置源添加到上下文/构建器中。 其中包括host.jsonappsettings.jsonlocal.settings.json (在本地运行时)和环境变量。 配置到 Azure 应用程序配置的链接的“更好”方法是使用此机制。

例如,您可以添加一个名为AzureAppConfigUrl的 FunctionApp 应用程序设置,其中包含以下值:

应用程序设置

本地,您将在 local.settings.json 文件中添加相应的条目:

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet",
    "AzureAppConfigUrl": "https://your-configuration.azconfig.io"
  }
}

然后,您将在配置 Azure 应用程序配置时引用此值。 在本地,它将从 JSON 文件中提取,当在 Azure 中运行时,它将从应用程序设置(或者更确切地说,环境变量)中读取:

public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
   var context = build.GetContext();
   var url = context.Configuration["AzureAppConfigUrl"];
   builder.ConfigurationBuilder.AddAzureAppConfiguration(url);
}

ConfigureAppConfiguration方法应专门用于配置应用程序的IConfiguration object。 还有另一种专用方法Configure应该用于配置应用程序本身(例如依赖注入)。

这是一个简单的例子:

public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
    FunctionsHostBuilderContext context = builder.GetContext();

    builder.ConfigurationBuilder
        .SetBasePath(context.ApplicationRootPath)
        .AddJsonFile("appsettings.json")
        .AddEnvironmentVariables();
}

public override void Configure(IFunctionsHostBuilder builder)
{
    IConfiguration configuration = builder.Services.BuildServiceProvider().GetRequiredService<IConfiguration>();

    // use configuration object 
}

如果由于某种原因这对您不起作用,您可以随时回退以从环境变量中获取值,因为设置已添加到Environment

Environment.GetEnvironmentVariable("DatabaseConnectionString"))

下面的文档将引导您了解如何在 Azure 函数https: //docs.microsoft.com/azure/azure-functions 中使用 Azure 应用程序配置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM