azure - 在 Azure 应用服务设置中存储连接字符串

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

我有一个连接到 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中的配置对象中?我不确定我是否遗漏了一些东西,但它不起作用......

enter image description here

最佳答案

是的,是的。

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

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

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

关于azure - 在 Azure 应用服务设置中存储连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624386/

相关文章:

Azure Functions - 事件中心不触发函数

c# - .NET Core 中的异步日志记录范围

c# - 使用 Swashbuckle AspNetCore 生成的 UI 文档不遵守 JsonProperty 值

c# - asp.net core 2 中基本通用 Controller 类的 HttpGet 属性名称的路由名称

azure - 无法在 azure 容器注册表上运行 docker 镜像的实例

Azure "Only empty App Service plans can be deleted"错误

azure - 如何从托管标识中删除 Azure 角色分配?

c# - EF 核心 'another instance is already being tracked'

c# - 如何像 Vue 一样从父层向 Blazor 组件随机添加 CSS 属性?

javascript - 如何在下拉列表中显示实际值并可能设置此列表中的其他选项