在Azure应用程序服务设置中存储连接字符串
我有一个连接到MySQL数据库的ASP.NETCore2.2WebAPI。 它托管在Azure应用程序服务上 目前,我正在appsettings.json文件中存储连接字符串:在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;" } 我
"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中配置系统的更多信息,强烈建议您阅读本文: