【发布时间】: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