[英]Cannot read user secrets in .net core 2.1
我在尝试读取用户机密时遇到问题。 我在startup.cs中的代码如下:
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json",
optional: false,
reloadOnChange: true);
if (env.IsDevelopment())
{
builder.AddUserSecrets<Startup>(false);
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
从 appsettings.json 和环境变量读取工作正常,但无论我在 secrets.json 文件中放入什么,都不会从中读取任何值。 项目文件中UserSecretsId的值正确,env.IsDevelopment()为true。
配置包含三个提供程序。 一个 JsonConfigurationProvider 包含来自 appsettings.json 的数据,一个 EnvironmentVariablesConfigurationProvider 包含来自环境变量的值,一个 JsonConfigurationProvider 没有数据。 我认为后一个是添加用户机密的那个。 但为什么是空的?
我有一个项目分成两个部分,但我不能为我的生命得到了秘密的衍生项目加载,它有完全相同的项目环境,包括secrets.json
在VS2017项目树....但它不会加载。
在检查每个上的实际.csproj
文件时,唯一的区别是生成的项目没有UserSecretsId
条目所以我只是右键单击项目,点击Manage User Secrets
然后关闭随后的Json编辑器,无需修改。
当我接下来运行项目时,我的原始secrets.json
被加载了......而不是空白的。
看来,如果你的项目文件夹中有secrets.json
,这会覆盖由Manage User Secrets
创建的文件,这些文件在C:\\Users\\<user>\\AppData\\Roaming\\Microsoft\\UserSecrets\\<userSercretsId>
创建它们
我在一个测试项目中让它像这样工作。 在 Startup.cs 中,我做了:
internal IConfigurationRoot Configuration { get; private set; }
public override void ConfigureTestServices(ref IServiceCollection services)
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json",
optional: false,
reloadOnChange: true);
builder.AddUserSecrets<Startup>(false);
builder.AddEnvironmentVariables();
Configuration = builder.Build();
services.AddScoped<IConfigurationRoot>(option => Configuration);
// ... more settings
}
在配置文件中,您可以通过以下方式简单地访问它
var secretValue = Configuration["SomeUserSecret"];
在外部,在您的测试类中,您通过在构造函数中指定IConfigurationRoot config
来使用依赖注入,并将配置分配给 class 属性,然后像访问它一样访问它
var secretValue = config["SomeUserSecret"];
关于准备工作,我发现这个有用的提示描述了您的项目的几个准备步骤。 简而言之,您需要编辑 csproj 文件并
<UserSecretsId>Insert New Guid Here</UserSecretsId>
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0"/>
尝试没有错误。 例如builder.AddUserSecrets();
我有同样的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.