【问题标题】:Storing connection strings in Azure App Service Settings在 Azure 应用服务设置中存储连接字符串
【发布时间】:2019-12-28 15:59:36
【问题描述】:

我有一个连接到 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 应用服务设置中,因为它提供了一些优势。我一直在尝试这样做,但正在努力让它发挥作用。

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

【问题讨论】:

  • 1.只需使用“内部”键值,因此 MyDataContext 用于 AppServices 上的“名称”。 2. 是的,您可以像在Startup 中一样继续阅读连接字符串。这一切都应该工作。
  • 谢谢 jpgrassi。我会假设在 Azure 应用服务中添加设置后,我可以从项目的 appsettings.json 中删除它?
  • 为什么要删除它?这些值被 Azure 替换,并作为环境变量注入到您的应用程序中。除非您使用某种自定义方式在Program.cs 中加载您的设置,否则一切都应该有效。但通常的用例是:appsettings.json 有一个 ConnectionStrings,但值为空。然后你在appsettings.development.json 上也有相同的开发连接字符串。您通过环境变量使用的生产版本,来自您的 Azure 应用服务。
  • 谢谢 jpgrassi。在 Azure 应用服务中编辑设置后,它们生效之前似乎有一点延迟。一分钟左右。它现在正在工作。顺便说一句,我完全删除了 appsettings.json 文件中的“ConnectionStrings”部分,它仍然有效 - 看起来 Azure App Service 正在将连接字符串注入到配置对象中,即使我的 appsettings.json 中没有“ConnectionStrings”部分文件
  • 是的,它就是这样工作的。它将以ConnectionStrings:MyDataContext 的格式注入连接字符串,因此您的应用程序可以按原样读取它。如果您想进一步了解 ASP.NET Core 中的配置系统,强烈推荐这篇文章:paraesthesia.com/archive/2018/06/20/…

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


【解决方案1】:

是的,是的。

是的,你可以将连接字符串命名为几乎任何你想要的,虽然我最近发现某些字符是不允许的,但是 Azure 不会告诉你这个,它只会把它们去掉而不告诉你,所以为了安全起见,我只使用字母数字字符,如果需要,你可以使用 CamelCasing。您无需使用 ConnectionStrings: 之类的前缀,因为这是由 Azure 自动完成的,并且无论如何在最新版本中语法已经更改。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-27
      • 2019-10-16
      • 2021-02-15
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多