在Azure App Service设置中存储连接字符串

时间:2019-08-23 10:26:58

标签: azure asp.net-core asp.net-core-webapi azure-app-api

我有一个连接到MySQL数据库的ASP .Net Core 2.2 Web API。 它托管在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")));

我读到我可以将这些连接字符串存储在Azure App Service设置中,因为它具有一些优点。我一直在尝试执行此操作,但正在努力使其正常工作。

我的第一个问题是,当将连接字符串添加到Azure应用服务设置(在“连接字符串”部分下)时,我在“名称/值”对中为 Name 输入什么?我是否只放入“ MyDataContext”或放入“ ConnectionStrings:MyDataContext”? (我试图保持与appsettings.json文件中的结构相同)。 我的第二个问题是,我是否仍可以像现在一样读取Startup.ConfigureServices方法中的连接字符串?据我了解,Azure App Service将自动将“设置”中的连接字符串存储注入到API的“配置”对象中?我不确定是否要丢失某些东西,但是它不起作用...

enter image description here

2 个答案:

答案 0 :(得分:2)

是和是。

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

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

如果出于安全原因可以将连接字符串存储在Azure中,则最好从appsettings.json文件中删除连接字符串,这样就不会在源中存储数据库服务器地址或连接凭据码。与此相较,第一步是将托管身份与Active Directory结合使用,您可以在连接字符串中指定AD用户名但不输入密码,然后将该用户(或用户组)分配为服务器管理员。

答案 1 :(得分:0)

更改Azure App Service的设置时似乎有点延迟(至少几秒钟)-我太快了...