Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Azure应用程序服务设置中存储连接字符串_Azure_Asp.net Core_Asp.net Core Webapi_Azure App Api - Fatal编程技术网

在Azure应用程序服务设置中存储连接字符串

在Azure应用程序服务设置中存储连接字符串,azure,asp.net-core,asp.net-core-webapi,azure-app-api,Azure,Asp.net Core,Asp.net Core Webapi,Azure App Api,我有一个连接到MySQL数据库的ASP.NETCore2.2WebAPI。 它托管在Azure应用程序服务上 目前,我正在appsettings.json文件中存储连接字符串: "ConnectionStrings": { "MyDataContext": "Server=server1.mysql.database.azure.com;user id=username;Pwd=password;persistsecurityinfo=True;database=db1;" } 我

我有一个连接到MySQL数据库的ASP.NETCore2.2WebAPI。 它托管在Azure应用程序服务上

目前,我正在appsettings.json文件中存储连接字符串:

"ConnectionStrings": {
    "MyDataContext": "Server=server1.mysql.database.azure.com;user id=username;Pwd=password;persistsecurityinfo=True;database=db1;"
  }
我在Startup.cs(在ConfigureServices方法中)中读取连接字符串,如下所示:

services.AddDbContext<MyContext>(options => options.UseMySql(Configuration.GetConnectionString("MyDataContext")));
services.AddDbContext(options=>options.UseMySql(Configuration.GetConnectionString(“MyDataContext”));
我读到我可以将这些连接字符串存储在Azure应用程序服务设置中,因为它提供了一些优势。我一直在尝试这样做,但我正在努力让它发挥作用

我的第一个问题是,在将连接字符串添加到Azure应用程序服务设置(在连接字符串部分下)时,我在名称/值对中为Name添加了什么?我是只放“MyDataContext”还是放“ConnectionString:MyDataContext”?(我试图保持appsettings.json文件中的相同结构)。 我的第二个问题是,我是否仍然可以像现在一样读取Startup.ConfigureServices方法中的连接字符串?据我所知,Azure应用程序服务将自动将连接字符串存储在设置中注入API中的配置对象?我不确定我是否遗漏了什么,但它不起作用


在更改Azure应用程序服务的设置时,似乎有一点延迟(至少几秒钟)-我太快了…

是和是

是的,您可以根据自己的需要命名连接字符串,尽管我最近发现某些字符是不允许的,但Azure没有告诉您这一点,它只会将它们删除,而不会告诉您,因此为了安全起见,我只使用字母数字字符,如果需要,您可以使用CamelCasing。您不需要像
ConnectionStrings:
这样的前缀,因为这是由Azure自动完成的,并且语法在最新版本中已经更改

是的,如果您没有指定自己的
ConfigurationBuilder
,您的web应用程序应该调用
CreateDefaultBuilder
,它将在运行时添加环境变量。您编写的代码将保持不变,您可以从
appsettings.json
文件中删除连接字符串,如果您将其保留在其中,它将被覆盖


如果出于安全原因,您可以将连接字符串存储在Azure中,那么最好从
appsettings.json
文件中删除连接字符串,这样您就不会在源代码中存储数据库服务器地址或连接凭据。在此基础上的一个步骤是将托管标识与Active Directory结合使用,在连接字符串中指定AD用户名,但不指定密码,然后将该用户(或用户组)指定为服务器管理员。

1。只需使用“inner”键值,因此AppServices上的“name”就可以使用
MyDataContext
。2.是的,您可以像在
启动中一样继续读取连接字符串。一切都会好起来的,谢谢你。我假设在Azure应用程序服务中添加设置后,我可以从项目的appsettings.json中删除它?为什么要删除它?这些值被Azure替换,并作为环境变量注入到应用程序中。除非您使用某种自定义方式在
Program.cs
中加载设置,否则所有设置都应正常工作。但是一个常见的用例是:
appsettings.json
有一个
ConnectionStrings
但是有一个空值。然后在
appsettings.development.json
上使用dev连接字符串执行相同的操作。您通过env变量从Azure应用程序服务使用的产品。谢谢JPI。在Azure应用程序服务中编辑设置后,在这些设置生效之前,看起来有点延迟。一分钟左右。它正在工作。顺便说一下,我删除了appsettings.json文件中的“ConnectionStrings”部分,它仍然有效-看起来Azure应用程序服务正在将连接字符串注入配置对象,即使我的appsettings.json文件中没有“ConnectionStrings”部分是的,这就是它的工作方式。它将以
connectionString:MyDataContext
的格式插入连接字符串,以便您的应用程序可以原样读取它。如果您想了解有关ASP.NET Core中配置系统的更多信息,强烈建议您阅读本文: