簡體   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