首页 > 解决方案 > 为 ASP.NET Core MVC 和 EF Core 解决方案提供 Azure SQL DB 连接字符串

问题描述

我相信我正在遵循 Microsoft 推荐的方法,并且我拥有所需的组件,但不知道如何将它们组合在一起。

我正在使用 Azure 应用程序配置服务来存储密钥保管库密钥(以及其他配置设置),并使用密钥保管库服务来提供包含 Azure SQL Server 用户名/密码的数据库连接字符串)

我有以下单独的工作项目/解决方案(ASP.NET Core MVC):

使用测试应用程序,我可以使用 3 个项目文件中的代码从我的 Azure 应用程序配置和 Key Vault 服务输出虚拟配置数据:

我的数据库应用程序使用这些文件中的代码访问数据库连接字符串:

我想升级我的数据库应用程序以使用测试应用程序提供的连接字符串配置值。因此计划是:

将测试应用 Program.cs 中的代码合并到 db app Program.cs 中。我看不出这有什么问题。

public static IHostBuilder CreateHostBuilder(string[] args) =>
 Host.CreateDefaultBuilder(args)
     .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureAppConfiguration((context, config) =>
            {
                var settings = config.Build();
                var appConfigurationEndpoint = settings["AzureAppConfigurationEndpoint"];

                config.AddAzureAppConfiguration(options =>
                   {
                       options.Connect(new Uri(appConfigurationEndpoint), new DefaultAzureCredential());

                           options.ConfigureKeyVault(kv =>
                            {
                                kv.SetCredential(new DefaultAzureCredential());
                            });
                   });

                webBuilder.UseStartup<Startup>();
            });
        });

但。此时我不知道如何访问["TestApp:Settings:KeyVaultDbString"]Startup.cs 中的配置数据。提供"KeyVaultDbString"代替我的"DefaultConnection".

这是现有的代码:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
    services.AddDatabaseDeveloperPageExceptionFilter();

    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddControllersWithViews();

    // this code is responsible for login-intercept required for solution
    services.AddAuthorization(options =>
        {
            options.FallbackPolicy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
        });
}

@Configuration["TestApp:Settings:KeyVaultMessage"]虽然使用在 Startup.cs 中配置服务时如何访问,但从视图页面访问 Azure 配置数据很容易?

我已阅读ASP.NET Core 中的配置。我理解以下内容:

任何建议,将不胜感激。

标签: c#asp.net-coreconfigurationcredentialsazure-keyvault

解决方案


appsettings.json 中 创建以下内容:

{
  "Data": {
  },
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=db;Trusted_Connection=True;"
  }
}

Startup.cs 中提供相关的连接字符串。更新ConfigureServices方法:

var conn = Configuration.GetConnectionString("DefaultConnection");
  • 在任何使用 Entity Framework Core 的 MVC 应用程序中,DbContext都使用方法中的依赖注入进行注入ConfigureServices

  • 启动类中也需要连接字符串

  • 要从 Startup 类中读取,IConfiguration需要一个对象,该对象可以从依赖注入中注入。

  • 要注入Startup类,开发人员可以使用构造函数或GetConnectionString方法。有关更多详细信息,请参阅连接字符串:实体框架核心SO


推荐阅读