3

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

在此处输入图像描述

4

2 回答 2

2

是的,是的。

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

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

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

于 2019-08-23T17:15:12.500 回答
0

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

于 2019-08-23T11:58:34.883 回答