如何在 Asp.Net Core 6 中从 Secrets.json 获取 ConnectionString?

Fan*_*o68 6 entity-framework connection-string asp.net-core secretsmanager

我是 Asp.Net Core 和 EF 的新手。我正在从数据库端开发一个简单的 CRUD,使用该Secrets.json文件隐藏我的连接字符串凭据。

但我不知道如何使用 AddDbContext() 引用该文件。

到目前为止我的代码:

 public class Startup
    {
        public Startup(IConfigurationRoot configuration)
        {
            Configuration = configuration;
        }
        public IConfigurationRoot Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddDbContext<POTS.myDBContext>(options => 
                options.UseSqlServer(Configuration.GetConnectionString("myConxStr")));
            services.AddControllers();
        }
Run Code Online (Sandbox Code Playgroud)

当代码运行时,我收到此AddDbContext<>错误

System.ArgumentNullException HResult=0x80004003 Message=值不能为空。(参数'connectionString')
来源= Microsoft.EntityFrameworkCore.SqlServer StackTrace:等等

我认为这是因为代码正在文件中查找参数appsettings.json,而我不希望连接字符串在其中。

我缺少什么?

Ren*_*ena 10

在 ASP.NET 6 之前

您可以将附加Secrets.json文件添加到配置参数中,Startup.cs如下所示:

public class Startup
{
    public Startup(IConfiguration configuration, IWebHostEnvironment env)
    {
        configuration = new ConfigurationBuilder().SetBasePath(env.ContentRootPath)
        .AddJsonFile("Secrets.json")
        .Build();

        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }
    //...
}
Run Code Online (Sandbox Code Playgroud)

或者在Program.cs中添加:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
    .ConfigureAppConfiguration((hostingContext, config) =>
    {
        var env = hostingContext.HostingEnvironment;

        config.SetBasePath(env.ContentRootPath)
            .AddJsonFile("Secrets.json", optional: true, reloadOnChange: true);

    })
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });
Run Code Online (Sandbox Code Playgroud)

在 ASP.NET 6 中

您可以将其添加Program.cs如下:

var builder = WebApplication.CreateBuilder(args);
builder.Configuration
    .SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("Secrets.json");

builder.Services.AddDbContext<POTS.myDBContext>(options =>
        options.UseSqlServer(builder.Configuration.GetConnectionString("myConxStr")));

// Add services to the container....
var app = builder.Build();
//....
Run Code Online (Sandbox Code Playgroud)

然后确保您的json 文件( Secrets.json)必须如下所示

{
  "ConnectionStrings": {
    "myConxStr": "xxxxxxx"
  }
}
Run Code Online (Sandbox Code Playgroud)