我有一个连接到 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应用服务会自动将设置中的连接字符串存储注入(inject)API中的配置对象中?我不确定我是否遗漏了一些东西,但它不起作用......
最佳答案
是的,是的。
是的,您可以将连接字符串命名为几乎任何您想要的名称,尽管我最近发现不允许使用某些字符,但 Azure 不会告诉您这一点,它只会把它们去掉而不告诉你,所以为了安全起见,我只使用字母数字字符,如果需要,你可以使用 CamelCasing。您不需要使用诸如 ConnectionStrings:
之类的前缀,因为这是由 Azure 自动完成的,并且语法在最新版本中已发生更改。
是的,如果您没有指定自己的 ConfigurationBuilder
,您的 Web 应用应该调用 CreateDefaultBuilder
,这将在运行时添加环境变量。您编写的代码将保持不变,您可以从 appsettings.json
文件中删除连接字符串,如果您将其保留在那里,无论如何它都会被覆盖。
如果出于安全原因您能够将连接字符串存储在 Azure 中,最好从 appsettings.json
文件中删除它们,这样您就不会存储数据库服务器地址或数据库服务器地址。源代码中的连接凭据。进一步的一步是将托管身份与 Active Directory 结合使用,您可以在连接字符串中指定 AD 用户名,但不指定密码,然后将该用户(或用户组)分配为服务器管理员。
关于azure - 在 Azure 应用服务设置中存储连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624386/