我正在尝试使用.NET Framework在Azure Function v1中利用Azure App配置。理想情况下,我想利用ConfigurationBuilders。
这意味着在开发计算机上运行时使用SimpleJsonConfigBuilder
类,而在Azure中托管时使用AzureAppConfigurationBuilder
。
我已经将其与我们的Web API项目一起使用,但是在Azure功能方面却陷入困境。
我所看到的问题是,Azure Function主机正在使用其自己的web.config,因此无法使用将在Web项目中使用的配置进行修改。
<configuration>
<configSections>
<section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
</configSections>
<configBuilders>
<builders>
<add name="Environment" type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment, Version=1.0.0.0, Culture=neutral" />
<add name="Json" optional="true" mode="Greedy" jsonFile="~/App_Data/settings.json" type="Microsoft.Configuration.ConfigurationBuilders.SimpleJsonConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Json, Version=1.0.0.0, Culture=neutral" />
<add name="AzureViaConnectionString" optional="true" mode="Greedy" connectionString="${AppConfigConnectionString}" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration" />
<add name="AzureViaMsi" optional="true" mode="Greedy" endPoint="${AppConfigEndpoint}" type="Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration" />
</builders>
</configBuilders>
<appSettings configBuilders="Environment,Json">
...
即使我不使用xml配置(我以为这是不可能的),有没有办法像在ConfigBuilders中那样修改ConfigurationManager.AppSettings
?
ConfigurationManager.AppSettings
在我访问时是只读的,所以我自己不能更新它。
我们确实有一个IAppSettings
接口,为此我编写了一个实现以使用Azure App Configuration REST api。但是,这意味着将与服务相关联的机密存储在常规功能应用程序设置中,而不是能够使用托管服务标识。
此外,函数运行时还需要一些其他设置,才能甚至执行我的任何代码,这意味着我无法从标准位置移走所有设置。
当前无法迁移到Azure Functions V2。
答案 0 :(得分:1)
1。安装pacakge Microsoft.Extensions.Configuration.AzureAppConfiguration
2。在VS中创建函数.net并使用以下代码:
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
var builder = new ConfigurationBuilder();
builder.AddAzureAppConfiguration(Environment.GetEnvironmentVariable("ConnectionString"));
var config = builder.Build();
string message = config["TestApp:Settings:Messagejoey"];
return message == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + message);
}
有关更多详细信息,您可以参考此article(它也适用于.net框架)。