【问题标题】:Azure App Service app settings are not available through ConfigurationManagerAzure 应用服务应用设置无法通过 ConfigurationManager 获得
【发布时间】:2023-04-02 22:47:01
【问题描述】:

我正在使用 Azure 应用服务。我正在尝试在 Application settings -> App settingsConnection strings 部分添加几个参数以覆盖 web.config 中的值

我无法使用 ConfigurationManager 访问这些设置。 我的项目基于.Net 4.6。

我可以使用Environment.GetEnvironmentVariable("name") 访问这些应用设置和连接字符串。

这些设置在页面 https://.scm.azurewebsites.net/Env.cshtml AppSettings 和 Connection Strings 部分不可见,仅在环境变量部分可见

我看了很多文章都没有找到答案。
是设计使然还是我做错了什么?

更新 1 我在 VS 2015 update 3 - Webforms App 中创建了一个测试项目,它可以工作,但它包含 OWIN,但我的项目没有。

更新 2 看起来我错误地描述了我的问题。 ConfigurationManager 有效,我可以从 web.config 访问设置,但在部署到 Azure 后,我希望这些值将被我在 Azure App Service -> Application settings -> App settings and Connection strings 中输入的值替换。但它不会发生。

我的 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>

 <appSettings>
    <add key="APPINSIGHTS_INSTRUMENTATIONKEY" value="dummy" />
 </appSettings>

 <connectionStrings>
    <add name="default" providerName="System.Data.SqlClient" connectionString="empty" />
    <add name="ApolloTI" providerName="System.Data.SqlClient" connectionString="empty" />
    <add name="TestData" providerName="System.Data.SqlClient" connectionString="empty" />
 </connectionStrings>
   ...
</configuration>

Screenshot - Setting in Azure

更新 3 我刚刚创建了一个空的 Web 项目并且它可以工作,所以看起来问题出在我的代码或项目配置中。

【问题讨论】:

  • 您是如何使用配置管理器的?包括代码 sn-p、预期行为、实际行为和门户中应用设置的屏幕截图。
  • 我更新了我的帖子,添加了详细信息

标签: asp.net azure azure-web-app-service configurationmanager .net-4.6


【解决方案1】:

我可以使用 Environment.GetEnvironmentVariable("name") 访问这些应用程序设置和连接字符串。 此外,这些设置在页面 https://.scm.azurewebsites.net/Env.cshtml 部分 AppSettings 和 Connection Strings 中不可见,仅在部分环境变量中可见

据我所知,kudu 的环境页面只会显示默认的 appsettings 和 Connection Strings。 它不会包含 webconfig 的 appsettings 和您在门户中设置的 appsettings。

根据这个article,你会发现以下信息:

应用设置 对于 .NET 应用程序,这些设置会在运行时注入到您的 .NET 配置 AppSettings 中,从而覆盖现有设置。 连接字符串 对于每个应用程序设置,都会创建两个环境变量;一个具有应用程序设置条目指定的名称,另一个具有 APPSETTING_ 前缀。两者都包含相同的值。

对于 .NET 应用,这些连接字符串会在运行时注入到您的 .NET 配置 connectionStrings 设置中,从而覆盖键等于链接数据库名称的现有条目。 这些设置也将在运行时作为环境变量提供,并以连接类型为前缀。环境变量前缀如下:

SQL Server:SQLCONNSTR_
MySQL:MYSQLCONNSTR_
SQL 数据库:SQLAZURECONNSTR_
自定义:CUSTOMCONNSTR_

例如,如果自定义连接字符串被命名为 Redis,它将通过环境变量 CUSTOMCONNSTR_Redis 访问。

所以你可以在环境变量中找到你的 appsettings 和 connectionstring。

当您的应用程序运行时,此值将替换 webconfig 值。

我也用ConfigurationManager类在我的电脑上写了一个测试demo,效果很好。

所以我猜你的代码可能有问题。

这是我的测试演示,希望能给你一些提示:

public void ReadAllSettings()
{
    string o = "";
    try
    {
        var appSettings = ConfigurationManager.AppSettings;

        if (appSettings.Count == 0)
        {
            o =  "AppSettings is empty.";
        }
        else
        {
            foreach (var key in appSettings.AllKeys)
            {
                o +=  string.Format("Key: {0} Value: {1}", key, appSettings[key]);
            }
        }
    }
    catch (ConfigurationErrorsException)
    {
        o = "AppSettings is empty.";
    }

    Label1.Text = o;
    Label2.Text = ConfigurationManager.ConnectionStrings["ConnStringDb2"].ConnectionString;
}

结果:

【讨论】:

  • 感谢您的回复。我刚刚创建了一个测试项目并且它可以工作,但是所有新项目都包含 OWIN,但我的项目包含不依赖 OWIN。也许它使值映射变得神奇。
  • 没有。它与OWIN无关。绝对没有。您的“失败”项目是基于 .NET Core 还是“普通”.NET?
  • 我的项目是“普通”.NET 但不是普通的网络应用程序。经过数小时的调查,我认为我的项目配置有问题。我应该保持原样,因为我花了两天时间没有运气。我使用 GetEnvironmentVariable 实现了解决方法。
猜你喜欢
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 2017-08-28
  • 2021-10-05
  • 1970-01-01
  • 2020-08-13
相关资源
最近更新 更多