asp.net-mvc - 将 ASP.NET Core MVC 部署到 Azure 应用服务 (Linux) 时出现 SQL 连接字符串问题
问题描述
我使用 EF Core 和 SQL Server 创建了一个简单的 ASP.NET Core MVC 应用程序。在 Windows 开发机器上,它使用 localdb。我正在尝试部署到 Azure App Service (Linux)。我创建了一个 Azure SQL 数据库。从 Visual Studio 2019 部署,我已将数据库设置为依赖项。在发布配置文件设置中,我为正在使用的数据库上下文选择了 Azure SQL 连接字符串。我还检查了 EF 迁移并在部署时脚本成功地为应用程序创建了表。我可以连接到 Azure SQL 并查看表。但是,当我运行已部署的应用程序并尝试数据库操作时,我得到: PlatformNotSupportedException: LocalDB is not supported on this platform
我可以从文档中看到设置连接字符串的各种方法,但我想知道 Visual Studio 2019 中的发布向导正在尝试做什么以及为什么它不起作用?我也不清楚密码存储在哪里。在发布配置文件中,密码似乎在连接字符串中作为纯文本,不好。我想知道如何将其用于生产。
更新我已经按照 Linux 教程中的步骤,使用 Azure CLI 并运行以下命令修复了这个问题:
az webapp config connection-string set --resource-group [myResourceGroup] --name [app name] --settings MyDbConnection='[connection-string]' --connection-string-type SQLServer
我不确定这种方法的安全性,并计划进一步调查。
解决方案
发布向导只是为您处理数据库创建/迁移,它不会修改您的项目,因为那是 1)不是它的目的和 2)它不能为您做出配置决定(即使用 appsettings、环境变量等.)
您需要通过配置在生产中提供连接字符串,就像在开发中一样。由于您要部署到 Azure 应用服务,因此最合乎逻辑的位置是 Azure 中的应用设置。这些将通过环境变量加载。只需指定您在开发中使用的相同密钥并在那里指定生产数据库目标。
推荐阅读
- javascript - 如何更改两个不同类型输入标签的值。以便该值始终与实时相同?
- mongodb - MongoDB 3.6-如何将匹配项从一个集合附加到另一个集合?
- html - IE 没有正确显示带有对象标签的 PDF
- aem - AEM 标签未按正确顺序显示
- python-3.x - 遍历所有记录,直到到达文件并输入到 sqlite
- mongodb - 如何每天拆分文件“mongod.log”?
- python - 将列表转换为具有键值对的字典
- php - 从服务器调用时脚本不写入文件,但在手动运行时有效
- python-3.x - 从神经网络导出输出
- webrtc - Gstreamer - Webrtc 我的管道应该被复用吗?