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

How to get ConnectionString from Secrets.json in Asp.Net Core 6?

我是 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();
        }

当代码运行时,我在 AddDbContext<>

收到此错误

System.ArgumentNullException HResult=0x80004003 Message=Value cannot be null. (Parameter 'connectionString')
Source=Microsoft.EntityFrameworkCore.SqlServer StackTrace: etc etc

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

我错过了什么?

之前 ASP.NET 6:

您可以向 Startup.cs 中的配置参数添加额外的 Secrets.json 文件,如下所示:

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; }
    //...
}

或在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>();
    });

在ASP.NET6:

您可以将其添加到 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();
//....

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

{
  "ConnectionStrings": {
    "myConxStr": "xxxxxxx"
  }
}