Azure App Service应用程序设置无法通过ConfigurationManager使用

问题描述 投票:1回答:1

我正在使用Azure App Service。我试图在应用程序设置-> 应用程序设置连接字符串中添加几个参数,以覆盖来自web.config

的值

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

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

此外,这些设置在页面https://.scm.azurewebsites.net/Env.cshtml的AppSettings和连接字符串部分中不可见,仅在环境变量部分中可见

我读了很多文章,但没有找到答案。是设计使然,还是我做错了?

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

更新2看来我错误地描述了我的问题。 ConfigurationManager可以工作,并且我可以从web.config访问设置,但是在部署到Azure之后,我希望这些值将替换为我在Azure App Service->应用程序设置->应用程序设置和连接字符串中输入的值。但这不会发生。

我的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项目,并且可以正常工作,因此问题似乎出在我的代码或项目配置中。

asp.net azure azure-web-app-service configurationmanager .net-4.6
1个回答
0
投票

我可以使用Environment.GetEnvironmentVariable(“ name”)访问这些应用设置和连接字符串。同样,这些设置在“ AppSettings和连接字符串”部分的https://.scm.azurewebsites.net/Env.cshtml页上不可见,仅在“环境变量”>部分中不可见

据我所知,kudu的环境页面将仅显示默认的应用程序设置和连接字符串。它不会包含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类在计算机上编写了一个测试演示,它运行良好。

所以我想您的代码可能有问题。

这是我的测试演示,希望它能为您提供一些提示:

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;
}

结果:enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.