如何从 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"
}
}
我是 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"
}
}