您需要将配置的配置与应用程序服务的注册分开。换句话说,Azure App Configuration 的设置应该在ConfigureAppConfiguration
你的注册中完成,而你的注册DbContext
应该从Configure
方法中完成。这将允许您访问方法中的属性Configuration
以检索您的连接字符串:FunctionsHostBuilderContext
Configure
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
对象索引器的值将取决于您在 Azure 应用程序配置中命名密钥的名称。假设您将其称为“DatabaseConnectionString”,那么这正是您要传递的内容,即:config["DatabaseConnectionString"]
.
前缀
Azure 应用程序配置有一些功能可以控制应用程序如何处理键名,特别是“修剪前缀”的能力。您在这里没有使用它(因为您只是传递 URL),但假设您在 Azure 应用程序配置中有密钥,例如MyFunction:DatabaseConnectionString
. 默认情况下,您将使用它的全名访问它:
var cs1 = config["MyFunction:DatabaseConnectionString"];
// or
var cs2 = config.GetSection("MyFunction")["DatabaseConnectionString"];
但是,您可以指定长格式连接选项。这将允许您仅选择以该前缀开头的键,并可以选择将它们修剪掉:
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.json
, appsettings.json
, local.settings.json
(在本地运行时)和环境变量。配置与 Azure 应用程序配置的链接的“更好”方法是使用此机制。
例如,您可以添加一个名为的 FunctionApp 应用程序设置AzureAppConfigUrl
,其中包含此值:

在本地,您将在 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);
}