You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6中如何在DbContext等类中访问secrets.json内的密钥?

.NET 6 中用 Secrets.json 隐藏 DbContext 连接字符串的正确姿势

问题背景

已经在secrets.json里存好数据库连接字符串,不想在DbContext里硬编码,但是对.NET 6的实现方式摸不清,不确定Program.cs的写法,也不知道怎么在DbContext里读取密钥,甚至怀疑自己写的Configuration类有没有必要。

解决步骤

1. 简化Program.cs,正确注册DbContext

不需要单独读取连接字符串再赋值,直接在注册DbContext的时候从配置里拿就行,原来那些多余的变量可以删掉。修改后的Program.cs如下:

using ItunesMVC;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// 添加MVC控制器和视图服务
builder.Services.AddControllersWithViews();

// 核心:注册DbContext并从配置(含secrets.json)读取连接字符串
builder.Services.AddDbContext<ItunesSearchDBEntities>(options =>
{
    var connectionString = builder.Configuration["ConnectionStrings:itunesAppDB"];
    options.UseMySql(connectionString, ServerVersion.Parse("8.0.28-mysql"));
});

var app = builder.Build();

// 配置HTTP请求管道
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

app.Run();

2. 精简DbContext类

DbContext不需要自己读取配置,因为已经通过依赖注入把配置好的Options传进来了。删掉多余的_configuration字段、ConnectionString属性,以及OnConfiguring里的硬编码部分(连那个警告一起消失)。修改后的DbContext代码:

using Microsoft.EntityFrameworkCore;

namespace ItunesMVC
{
    public partial class ItunesSearchDBEntities : DbContext
    {
        // 只保留接收Options的构造函数
        public ItunesSearchDBEntities(DbContextOptions<ItunesSearchDBEntities> options)
            : base(options)
        {
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.UseCollation("utf8mb4_0900_ai_ci")
                .HasCharSet("utf8mb4");

            OnModelCreatingPartial(modelBuilder);
        }

        partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
        
        public DbSet<SearchCount> SearchCounts { get; set; }
    }
}

3. 删掉多余的Configuration类

你写的那个Configuration类完全没必要,直接通过builder.Configuration["ConnectionStrings:itunesAppDB"]就能读取secrets里的连接字符串,省得多写一个类。

4. 确认secrets.json的结构

确保你的secrets.json是这个格式:

{
  "ConnectionStrings": {
    "itunesAppDB": "你的MySQL连接字符串"
  }
}

原理说明

.NET 6的WebApplication.CreateBuilder会自动加载开发环境下的secrets.json,所以builder.Configuration会自动包含这里面的配置项,不需要额外写代码读取。注册DbContext时把连接字符串通过Options注入进去,DbContext直接用构造函数接收就行,完美避开硬编码。

内容的提问来源于stack exchange,提问作者Stephen Aranda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:31:35