C# Azure无法访问应用程序服务配置中存储的连接字符串

C# Azure无法访问应用程序服务配置中存储的连接字符串,c#,azure,asp.net-core,azure-sql-database,azure-configuration,C#,Azure,Asp.net Core,Azure Sql Database,Azure Configuration,我在Azure中有一个应用程序服务,作为我正在设计的系统的API运行。由于API负责直接访问数据库,我显然不想在源代码中存储连接字符串,所以我将其存储在Azure仪表板上应用程序服务配置的连接字符串部分 我的代码几乎是这个>>的复制品,除了我检查了它运行的当前配置(调试、发布等),所以当我在Visual Studio中进行本地调试时,我使用的是localdb连接(硬编码)。我有一个appsettings.json文件,但其中没有连接字符串,只有用于JWT身份验证和日志记录的设置 调用此命令时:

我在Azure中有一个应用程序服务,作为我正在设计的系统的API运行。由于API负责直接访问数据库,我显然不想在源代码中存储连接字符串,所以我将其存储在Azure仪表板上应用程序服务配置的连接字符串部分

我的代码几乎是这个>>的复制品,除了我检查了它运行的当前配置(调试、发布等),所以当我在Visual Studio中进行本地调试时,我使用的是localdb连接(硬编码)。我有一个appsettings.json文件,但其中没有连接字符串,只有用于JWT身份验证和日志记录的设置

调用此命令时:

services.AddDbContext<ApplicationDbContext>(
            option => option.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
在过去的一周里,我一直在愚蠢地工作,试图让这个工作正常进行,而且一直在兜圈子,我快把自己逼疯了。Google和StackOverflow的结果好坏参半,因为多年来不同版本的Azure和ASP.NET Core给出了不同的答案。就好像它根本无法访问Azure配置一样。请参考上面的链接,因为这与我的设置相同,并且基于.NET版本和类型(核心或框架)有许多不同的答案

编辑:请阅读我的问题,连接字符串不存储在项目的appsettings.json文件中,它存储在Azure中,如下所示(我已将连接字符串名称置空,但它们与代码中的名称匹配,不,它不是“DefaultConnection”):


确保变量的命名有效。在App Service blade中,您可以在“开发工具”->“高级工具”的SCM站点查看实际环境变量

通过应用程序服务的门户配置部分添加的名为“DefaultConnection”的连接字符串在环境变量中类似于SQLCONNSTR_DefaultConnection。要在代码中访问它,您需要执行
configuration.GetConnectionString(“DefaultConnection”)


有关设置应用程序服务配置值的详细信息,请参阅。

Configuration.GetConnectionString()需要如下JSON:
{“ConnectionString”:{“DefaultConnection”:“DB Connection String here”}
,您的设置文件是什么样子的?请再次阅读我的问题,根据Microsoft的指导,连接字符串不存储在设置文件中,而是存储在Azure中。添加了屏幕截图。请查看以下内容,环境变量配置提供程序应获取这些内容@大卫799你是一颗绝对的钻石!!!!这是命名的事情,如果你把你的答案,我会接受它,并给出更多的细节,我要睡觉了!这就是问题所在。我的连接字符串有连字符,这似乎是不允许的(我假定任何非字母数字的东西都是不允许的)。假设我的连接字符串是“SQL Server”,Azure保存的实际变量是“SQLCONNSTR\u TheSQLServer”,但是“SQLCONNSTR\u”是由Azure读取并剥离的,因此要从代码中调用它,您将使用
Configuration.GetConnectionString(“TheSQLServer”)
。我花了很长时间才弄明白这一点,在我阅读的所有Microsoft文档中,都没有提到Azure变量名不允许使用的字符。是的,我查看了限制字符,但也找不到任何字符。当然,你可以使用冒号和下划线,任何我会积极避免的事情!很穷,很穷。我可以看到我的评论被编辑了,可能是因为语言,但我这周一直在愚蠢地工作,想弄清这一点,我对微软一点都不满意,尤其是Azure实际上已经删除了我在配置中输入的内容,但在仪表板中仍然保留了相同的名称。对于阅读本文的任何人,我都会说,请注意安全,如果需要的话,只需使用字母数字和驼色外壳(这就是我所做的)。刚刚修复了现在坏掉的托管标识连接字符串!死在一个小房间里你现在通过钥匙库来做吗?
Unhandled Exception: System.ArgumentNullException: Value cannot be null
Parameter name: connectionString