用于容器的 Azure Web 应用程序 (aspnetcore 2.2) 在启动时不读取 azure appsettings 值

Azure web app for containers (aspnetcore 2.2) not reading azure appsettings values on startup

我在 Azure 中有一个用于容器 运行 的 Web 应用程序,我在本地使用本地应用程序设置文件。

部署到 Azure 后,我希望容器从 azure 设置中提取 appsettings 值。这些是通过 AzureDevops 设置的,并且在我检查门户时正确显示。

但是,该站点在部署后不会从 Azure 中提取应用程序设置值。它正在使用文件中的那些。我正在使用指定的双下划线名称。

我创建了一个测试控制器来输出应用程序设置值。这是测试视图输出的片段:

Build version: 2019.1.23.1
Location: local
Database__DatabaseConnectionString: Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=application;Data Source=.
---
-------
Env vars: Key WEBSITE_AUTH_SIGNING_KEY Value ASDS*(&*&*(SDSD05C29
Key DOTNET_RUNNING_IN_CONTAINER Value true
Key WEBSITE_ROLE_INSTANCE_ID Value 0
Key Database__DatabaseConnectionString Value Server=tcp:servername01.database.windows.net,1433;Initial Catalog=application;Persist Security Info=False;User ID=applicationUser;Password=password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
Key APPSETTING_Database__DatabaseConnectionString Value Server=tcp:servername01.database.windows.net,1433;Initial Catalog=application;Persist Security Info=False;User ID=applicationUser;Password=password;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;

可以看出,Database__DatabaseConnectionString 应该由应用程序使用。但它不是。

这可能是什么问题?根据 aspnetcore 文档,这应该是标准功能。

原来这是应用程序中的错误。有问题的控制器有一个注入的 IOptions 被注入到构造函数中。不幸的是,其中一个控制器有不同的行为,因为一个具体的实例被注入了。由于此对象未在 Startup.cs 中正确初始化,这具有将空值传递到构造函数的效果。

最后发现空值,这意味着使用了默认 appsettings.json 值。

修复了上述错误(通过确保所有控制器使用相同的 IOptions 值)后,应用程序将在启动时正确获取和使用 azure appsettings 值。